문자열의 첫 글자를 얻고 싶습니다 $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
다시.
클라이언트 측 그들은에서 보내 데이터 수정했다 그러나, type
에 type[]
, 예를 들어를, 다음이 배열의 데이터로 ‘제어’와 ‘테스트’를 보내, $_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