strstr과 strpos 중 어떤 방법이 선호됩니까?
많은 개발자들이 서브스트링의 존재를 확인하기 위해 str과 strpos를 모두 사용하고 있는 것을 알 수 있었습니다.그 중 하나가 선호되고 그 이유는 무엇입니까?
PHP 온라인 매뉴얼:
건초더미 내에서 특정 니들이 발생하는지 여부만 판별하는 경우에는 보다 빠르고 메모리 사용량이 적은 기능을 사용하십시오.
다음은 질문에 대한 다른 답변(+benchmarks)입니다. 이 답변은 거의 동일합니다(질문할 때 귀하의 답변을 알지 못했습니다).
그 사이에, 벤치마크 테스트도 작성했습니다만, 각 관련 기능에 대해 1000000회 실행했습니다(strstr(),strpos(),stristr()그리고.stripos()).
코드는 다음과 같습니다.
<?php
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
$mystring = 'blahblahblah';
$findme = 'bla';
echo 'strstr & strpos TEST:<pre>';
$time_start = getmicrotime();
for($i=0; $i<1000000; $i++) strstr($mystring, $findme);
$time_needed_strstr = getmicrotime() - $time_start;
echo 'strstr(): ',
round( $time_needed_strstr , 8 ). PHP_EOL;
$time_start = getmicrotime();
for($i=0; $i<1000000; $i++) stristr($mystring, $findme);
$time_needed_stristr = getmicrotime() - $time_start;
echo 'stristr(): ',
round( $time_needed_stristr , 8 ) . PHP_EOL;
$time_start = getmicrotime();
for($i=0; $i<1000000; $i++) strpos($mystring, $findme) !== false;
$time_needed_strpos = getmicrotime() - $time_start;
echo 'strpos() !== false: ',
round( $time_needed_strpos , 8 ) . PHP_EOL;
$time_start = getmicrotime();
for($i=0; $i<1000000; $i++) stripos($mystring, $findme) !== false;
$time_needed_stripos = getmicrotime() - $time_start;
echo 'stripos() !== false: ',
round( $time_needed_stripos , 8 ) . PHP_EOL;
echo PHP_EOL;
echo 'time_needed_stristr - time_needed_strstr: ',
round( $time_needed_stristr - $time_needed_strstr , 8) . PHP_EOL;
echo 'time_needed_stripos - time_needed_strpos: ',
round( $time_needed_stripos - $time_needed_strpos , 8) . PHP_EOL;
echo PHP_EOL;
echo 'time_needed_strstr - time_needed_strpos: ',
round( $time_needed_strstr - $time_needed_strpos , 8) . PHP_EOL;
echo 'time_needed_stristr - time_needed_stripos: ',
round( $time_needed_stristr - $time_needed_stripos , 8) . PHP_EOL;
echo '</pre>';
?>
첫 번째 출력은 다음과 같습니다.이 출력은 승자를 나타내고 있습니다.
strstr & strpos TEST:
strstr(): 2.39144707
stristr(): 3.65685797
strpos() !== false: 2.39055395
stripos() !== false: 3.54681897
time_needed_stristr - time_needed_strstr: 1.2654109
time_needed_stripos - time_needed_strpos: 1.15626502
time_needed_strstr - time_needed_strpos: 0.00089312
time_needed_stristr - time_needed_stripos: 0.110039
다음 출력은 첫 번째 출력과 비슷합니다(strpos()다시 승자) :
strstr & strpos TEST:
strstr(): 2.39969015
stristr(): 3.60772395
strpos() !== false: 2.38610101
stripos() !== false: 3.34951186
time_needed_stristr - time_needed_strstr: 1.2080338
time_needed_stripos - time_needed_strpos: 0.96341085
time_needed_strstr - time_needed_strpos: 0.01358914
time_needed_stristr - time_needed_stripos: 0.25821209
아래가 또 하나 있는데, 더 흥미로운 것은 이 경우,strstr()승자는 다음과 같습니다.
strstr & strpos TEST:
strstr(): 2.35499191
stristr(): 3.60589004
strpos() !== false: 2.37646604
stripos() !== false: 3.51773095
time_needed_stristr - time_needed_strstr: 1.25089812
time_needed_stripos - time_needed_strpos: 1.14126492
time_needed_strstr - time_needed_strpos: -0.02147412
time_needed_stristr - time_needed_stripos: 0.08815908
즉, 실제로는 '환경적 상황'에 의존할 수 있으며, 때로는 영향을 미치기 어려울 수 있으며, 이와 같이 '마이크로 최적화 태스크'의 결과를 변경할 수 있습니다.또한 문자열이 다른 문자열에 존재하는지 여부를 확인할 수 있습니다.
하지만 저는 대부분의 경우, 제 생각에, 제 생각에는,strstr().
나는 이 시험이 누군가에게 도움이 되었기를 바란다.
많은 개발자들이 마이크로 최적화 목적으로 사용합니다.
를 사용하면 부울 컨텍스트에서 결과 문자열을 false로 해석할 수 없는 경우에만 사용할 수 있습니다.
이벤트에 의해 극복: PHP8은 "작업에 적합한 도구"를 도입했습니다(이전 셋업에서는 심을 사용할 수 있습니다).통역사 수준의 비교와 통사적 오버헤드 없이 모든 사람들이 좋아했던 바로 그 일을 할 수 있습니다.
strpos()는 건초 더미 내의 특정 바늘 위치를 검출합니다.stristr()은 바늘이 건초 더미에 있는지 여부를 테스트합니다.
strpos()는 고속으로 메모리 소비량이 적습니다.
strstr()의 이유: 바늘이 문자열의 선두에 있으면 strpos가 0을 반환합니다(따라서 === false로 확인해야 함).
가독성과 쉬운 코딩이 좋습니다.strpos() !==false 좀 헷갈리네요.
언급URL : https://stackoverflow.com/questions/5820586/which-method-is-preferred-strstr-or-strpos
'programing' 카테고리의 다른 글
| 키워드 vs ON 절 사용 - MYSQL (0) | 2022.12.30 |
|---|---|
| NotORM을 사용하여 자체 JOIN 스테이트먼트 작성 (0) | 2022.12.30 |
| Node.js에서 스택 트레이스를 인쇄하는 방법 (0) | 2022.12.30 |
| Python 클래스의 문자열 표현을 변경하려면 어떻게 해야 합니까? (0) | 2022.12.30 |
| 기본 Java 설치의 cacerts 위치를 얻으려면 어떻게 해야 합니까? (0) | 2022.12.30 |