PHP에서 이미 "_"로 시작하는지 확인하는 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
예 : 나는 $variable = "_foo"
$ 변수가 밑줄로 시작하지 않도록 확실히하고 싶습니다 "_"
. PHP에서 어떻게 할 수 있습니까? 더 많은 뒤의 문자 배열에 대한 액세스가 있습니까?
substr
PHP 에서 함수를 확인하고 그런 식으로 첫 번째 문자를 잡을 수 있습니다 .
http://php.net/manual/en/function.substr.php
if (substr('_abcdef', 0, 1) === '_') { ... }
$variable[0] != "_"
어떻게 작동합니까?
PHP에서는 배열 표기법으로 특정 문자를 사용할 수 있습니다. $variable[0]
대부분의 첫 번째 문자입니다 ($ 변수가있는 경우).
많은 효율성을 가지고 있었으므로 지금까지 호기심에서 주어진 기능을 벤치마킹했습니다.
function startsWith1($str, $char) {
return strpos($str, $char) === 0;
}
function startsWith2($str, $char) {
return stripos($str, $char) === 0;
}
function startsWith3($str, $char) {
return substr($str, 0, 1) === $char;
}
function startsWith4($str, $char){
return $str[0] === $char;
}
function startsWith5($str, $char){
return (bool) preg_match('/^' . $char . '/', $str);
}
function startsWith6($str, $char) {
if (is_null($encoding)) $encoding = mb_internal_encoding();
return mb_substr($str, 0, mb_strlen($char, $encoding), $encoding) === $char;
}
다음은 각각 100.000 실행되는 평균 DualCore 컴퓨터의 결과입니다.
// Testing '_string'
startsWith1 took 0.385906934738
startsWith2 took 0.457293987274
startsWith3 took 0.412894964218
startsWith4 took 0.366240024567 <-- fastest
startsWith5 took 0.642996072769
startsWith6 took 1.39859509468
// Tested "string"
startsWith1 took 0.384965896606
startsWith2 took 0.445554971695
startsWith3 took 0.42377281189
startsWith4 took 0.373164176941 <-- fastest
startsWith5 took 0.630424022675
startsWith6 took 1.40699005127
// Tested 1000 char random string [a-z0-9]
startsWith1 took 0.430691003799
startsWith2 took 4.447286129
startsWith3 took 0.413349866867
startsWith4 took 0.368592977524 <-- fastest
startsWith5 took 0.627470016479
startsWith6 took 1.40957403183
// Tested 1000 char random string [a-z0-9] with '_' prefix
startsWith1 took 0.384054899216
startsWith2 took 4.41522812843
startsWith3 took 0.408898115158
startsWith4 took 0.363884925842 <-- fastest
startsWith5 took 0.638479948044
startsWith6 took 1.41304707527
보시다시피 건초 더미를 배열로 처리하여 첫 번째 위치의 문자를 찾는 것이 항상 가장 빠른 솔루션입니다. 또한 동일한 길이에 관계없이 동일한 속도로 수행됩니다. 사용 strpos
은 substr
짧은 문자열 보다 빠르지 만 문자열이 접두어로 시작하지 않는 긴 문자열의 경우 더 느립니다. 하지만 그 차이는 무관합니다. 긴 어깨 stripos
로 엄청나게 느립니다. preg_match
거의 동일하게 수행되는 수행 속도는 평범합니다. mb_substr
솔루션 최악의 수행, 아마 더 많은 수있는 생각하면서.
이 숫자는 100.000 실행에 대한 것이므로 호출 당 0.0000x 초에 대해 말하는 것이 분명합니다. 효율성 을 위해 다른 하나를 선택 하는 것은 앱이 startsWith
생계를 확인 하지 않는 한 쓸모없는 마이크로 최적화 입니다.
이것은 성능에 대해 걱정하지 않는 가장 간단한 대답입니다.
if (strpos($string, '_') === 0) {
# code
}
strpos가 반환 0
하면 찾고 있던 내용이 0
문자열의 시작 인 character 에서 시작한다는 의미입니다 .
여기에 자세히 설명되어 있습니다. http://uk3.php.net/manual/en/function.strpos.php
(PS $string[0] === '_'
가 베스트 답변)
function starts_with($s, $prefix){
// returns a bool
return strpos($s, $prefix) === 0;
}
starts_with($variable, "_");
함수로 시작 하는 것이 더 좋습니다 .
function mb_startsWith($str, $prefix, $encoding=null) {
if (is_null($encoding)) $encoding = mb_internal_encoding();
return mb_substr($str, 0, mb_strlen($prefix, $encoding), $encoding) === $prefix;
}
pinusnegra의 답변을 구축하고 해당 답변에 대한 Gumbo의 의견에 대한 응답으로 :
function has_leading_underscore($string) {
return $string[0] === '_';
}
PHP 5.3.0에서 실행하면 문자열 길이가 1 자 이상인지 확인하지 않아도 다음이 작동하고 예상 값을 반환합니다.
echo has_leading_underscore('_somestring').', ';
echo has_leading_underscore('somestring').', ';
echo has_leading_underscore('').', ';
echo has_leading_underscore(null).', ';
echo has_leading_underscore(false).', ';
echo has_leading_underscore(0).', ';
echo has_leading_underscore(array('_foo', 'bar'));
/*
* output: true, false, false, false, false, false, false
*/
다른 버전의 PHP가 어떻게 반응할지 모르겠지만 모두 작동한다면이 방법은 아마도 substr 경로보다 더 효율적일 것입니다.
참조 URL : https://stackoverflow.com/questions/1962031/how-to-check-if-a-string-starts-with-in-php
'ProgramingTip' 카테고리의 다른 글
가장 가까운 10으로 반올림하는 Javascript (0) | 2021.01.09 |
---|---|
UITextField 텍스트에 그림자 효과 (0) | 2021.01.08 |
프로그래머는 왜 도서관을 피하는 것 같습니까? (0) | 2021.01.08 |
EntityFramework 패키지가 프로젝트에 설치되지 않은 것입니다. (0) | 2021.01.08 |
자바에서 생성 화 필요 (0) | 2021.01.08 |