programing

$str[0] 문자열의 첫 번째 문자 가져오기

procenter 2022. 10. 10. 20:56
반응형

$str[0] 문자열의 첫 번째 문자 가져오기

현의 첫 글자를 알고 싶은데$str[0]잘 동작합니다.이 표기법은 일반적으로 어레이에 사용되기 때문에 이것이 '좋은 관행'인지 잘 모르겠습니다.이 기능은 잘 문서화되어 있지 않은 것 같습니다만, 이 표기법을 사용해도 괜찮은지 어떤지를 알려 주시겠습니까?

아니면 그냥 좋은 일만 할까?substr($str, 0, 1)?

또, 그 곱슬곱슬한 괄호)에 주목했습니다.$str{0})도 동작합니다.저거 어떻게 된 거예요?

네. 문자열은 문자 배열로 볼 수 있으며 배열 위치에 액세스하는 방법은[]교환입니다.보통 사용에는 전혀 문제가 없습니다.$str[0](확실하게 말하면, 그 속도보다 훨씬 빠를 겁니다.substr()메서드).

두 방법 모두 경고는 1개뿐입니다. 번째 문자가 아닌 첫 번째 바이트가 취득됩니다.멀티바이트 부호화(UTF-8 등)를 사용하고 있는 경우, 이것은 중요합니다.이 기능을 지원하려면 ,mb_substr()오늘날에는 멀티바이트 입력을 항상 상정하고 있기 때문에 이것이 최선의 선택이지만, 약간 느립니다.

PHP 5.3.0부터는 {} 구문이 사용되지 않습니다. 대괄호가 좋습니다.

$_POST의 일부에서 첫 번째 문자를 원한다고 가정해 봅시다. 이를 'type'이라고 합니다.$_POST['type']는 현재 'Control'입니다.이 경우,$_POST['type'][0], 또는substr($_POST['type'], 0, 1)얻을 수 있을 것이다C뒤로.

다만, 클라이언트측이 송신한 데이터를 변경하는 경우는,type로.type[]예를 들어, 'Control'과 'Test'를 이 어레이의 데이터로 전송합니다.$_POST['type'][0]이제 돌아오다Control보다는C반면에.substr($_POST['type'], 0, 1)그냥 실패할 거야

그래서 네, 사용방법에 문제가 있을 수 있습니다.$str[0]하지만 그건 주변 상황에 따라 다르죠.

유일한 의문점은 이 기술이 멀티바이트 문자열에 얼마나 적용되는가 하는 것입니다만, 그것이 고려사항이 아니라면, 고객님은 커버되고 있다고 생각합니다(의심스럽다면,mb_substr()확실히 안전한 선택인 것 같습니다.)

그러나 큰 그림으로 볼 때 문자열의 'n'번째 글자에 얼마나 자주 접근해야 이것이 중요한 고려사항이 될 수 있는지 궁금합니다.

멀티바이트(유니코드) 문자열의 경우str[0]문제를 일으킬 수 있습니다. mb_substr()을 사용하다예를 들어 다음과 같습니다.

$first_char = mb_substr($title, 0, 1);

자세한 내용은 이쪽: UTF-8 문자열의 첫 번째 문자를 가져옵니다.

리소스에 따라 다르지만 스크립트를 실행하여 직접 확인할 수 있습니다.

<?php
$tests = 100000;

for ($i = 0; $i < $tests; $i++)
{
    $string = md5(rand());
    $position = rand(0, 31);

    $start1 = microtime(true);
    $char1 = $string[$position];
    $end1 = microtime(true);
    $time1[$i] = $end1 - $start1;

    $start2 = microtime(true);
    $char2 = substr($string, $position, 1);
    $end2 = microtime(true);
    $time2[$i] = $end2 - $start2;

    $start3 = microtime(true);
    $char3 = $string{$position};
    $end3 = microtime(true);
    $time3[$i] = $end3 - $start3;
}

$avg1 = array_sum($time1) / $tests;
echo 'the average float microtime using "array[]" is '. $avg1 . PHP_EOL;

$avg2 = array_sum($time2) / $tests;
echo 'the average float microtime using "substr()" is '. $avg2 . PHP_EOL;

$avg3 = array_sum($time3) / $tests;
echo 'the average float microtime using "array{}" is '. $avg3 . PHP_EOL;
?>

일부 참조 번호(구 Core Duo 머신)

$ php 1.php 
the average float microtime using "array[]" is 1.914701461792E-6
the average float microtime using "substr()" is 2.2536706924438E-6
the average float microtime using "array{}" is 1.821768283844E-6

$ php 1.php 
the average float microtime using "array[]" is 1.7251944541931E-6
the average float microtime using "substr()" is 2.0931363105774E-6
the average float microtime using "array{}" is 1.7225742340088E-6

$ php 1.php 
the average float microtime using "array[]" is 1.7293763160706E-6
the average float microtime using "substr()" is 2.1037721633911E-6
the average float microtime using "array{}" is 1.7249774932861E-6

이 말을 것 요.[] ★★★★★★★★★★★★★★★★★」{}이치노

$str = 'abcdef';
echo $str[0];                 // a

인간으로서 말하자면, 나는 계속하고 싶다.$str[0] 때는 아, 아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아아,아,아$str[0]substr($str, 0, 1)이것은 아마 선호도의 문제로 귀결될 것이다.

성능에 관한 한 프로파일 프로파일입니다.:) 또는 PHP 소스 코드를 들여다볼 수 있습니다.

저도 그 표기법을 쓴 적이 있는데, 부작용이나 오해가 없습니다.말이 되는군요.문자열은 결국 글자 배열에 불과합니다.

언급URL : https://stackoverflow.com/questions/1972100/getting-the-first-character-of-a-string-with-str0

반응형