$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
'programing' 카테고리의 다른 글
Javascript를 사용하여 div의 HTML에서 pdf 생성 (0) | 2022.10.10 |
---|---|
Vue에서 숫자 입력 구성 요소를 생성하는 방법(제한을 초과하여 입력할 수 없음) (0) | 2022.10.10 |
Django에서 고정 장치를 로드할 때 내용 유형에 문제가 있습니다. (0) | 2022.10.10 |
PHP에서 진행률 표시줄 업로드 (0) | 2022.10.10 |
Laravel 요구::all()을 스태틱하게 호출하지 말 것 (0) | 2022.10.10 |