[php] $ str [0]으로 문자열의 첫 문자 얻기

문자열의 첫 글자를 얻고 싶습니다 $str[0]. 표기법이 일반적으로 배열과 함께 사용되기 때문에 이것이 ‘좋은 습관’인지 확실하지 않습니다. 이 기능은 문서화가 잘되어 있지 않은 것 같습니다. 그래서이 표기법을 사용하는 것이 모든면에서 괜찮은지 말해 주실 것입니다.

아니면 그냥 좋은 ol ‘에 충실해야 substr($str, 0, 1)합니까?

또한 중괄호 ( $str{0})도 작동합니다. 무슨 일이야?



답변

예. 문자열은 문자형 배열로 볼 수 있으며 배열의 위치에 액세스하는 방법은 []연산자 를 사용하는 것 입니다. 일반적으로 사용하는 데 전혀 문제가 없습니다 $str[0](그리고 substr()방법 보다 훨씬 빠릅니다 ).

두 가지 방법 모두 한 가지주의 사항이 있습니다 . 첫 번째 문자가 아닌 첫 번째 바이트 를 얻습니다 . 멀티 바이트 인코딩 (예 : UTF-8)을 사용하는 경우 중요합니다. 이를 지원하려면을 사용하십시오 . 요즘에는 항상 멀티 바이트 입력을 가정해야하므로 이것이 최선의 선택이지만 약간 느려질 것입니다.mb_substr()


답변

{} 구문은 PHP 5.3.0부터 더 이상 사용되지 않습니다. 대괄호가 권장됩니다.


답변

$ _POST의 일부에서 첫 번째 문자를 원한다고 가정하고 ‘type’이라고 부를 수 있습니다. 그리고 그 $ _POST [ ‘type’]은 현재 ‘Control’입니다. 당신은 사용이 경우 경우 경우 $_POST['type'][0], 또는 substr($_POST['type'], 0, 1)당신은 얻을 것이다 C다시.

클라이언트 측 그들은에서 보내 데이터 수정했다 그러나, typetype[], 예를 들어를, 다음이 배열의 데이터로 ‘제어’와 ‘테스트’를 보내, $_POST['type'][0]지금 돌아갑니다 Control보다는 C반면 substr($_POST['type'], 0, 1)단순히 실패합니다.

따라서을 사용하는 데 문제가있을 수 $str[0]있지만 주변 환경에 따라 다릅니다.


답변

내 유일한 의심은이 기술이 멀티 바이트 문자열에 어떻게 적용되는지에 대한 것입니다. (의심 mb_substr()스러운 경우 분명히 안전한 선택 인 것 같습니다.)

그러나 큰 그림의 관점에서 볼 때, 이것이 문자열에서 ‘n’번째 문자에 얼마나 자주 액세스해야하는지 궁금합니다.


답변

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

<?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;
?>

일부 참조 번호 (이전 CoreDuo 시스템)

$ 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[0]. 내가 아는 한,의 의미 $str[0]를 한 눈 에 파악하는 것이 더 빠릅니다 substr($str, 0, 1). 이것은 아마도 선호의 문제로 귀결됩니다.

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


답변

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