2011-11-03 2 views
2

PHP 문자열의 끝을 찾는 방법? 하나의 작업 : 모든 기능없이 문자열 길이를 인식. PHP의 모든 문자열이 null 바이트 (\0)로 끝나는 것을 알고 있지만 마지막 기호 다음에 문자열의 요소를 알 수 없습니다.함수를 사용하지 않고 문자열의 끝을 감지

예를 들어,이 작동하지 않습니다

while($a[++$length]); 

어떻게 문자열의 길이를 알 수있는 기능을 사용하지 않고? PHP에서

+3

그건 :

그러나 $a[$length]의 값을 읽는 것은 경고를 생성 할 것입니다 여부를 테스트하는 언어가 isset을 구성 할 수 있습니다. 끝에 null 바이트에 액세스 할 수 있다고 생각하지 않습니다. PHP는 C가 아닙니다. 잘못된 것일 수 있습니다. 그러나 접근 방법이 효과적이라고 생각하지 않습니다. – Joe

+2

@evilone 나는 모든 정상적인 교육자가 모든 언어의 * php * 프로그램을 학생들에게 소개 할 것을 의심합니다. – phihag

+1

@phihag 나는 당신과 동의하지만, 이상한 질문으로 판단하면서 교육자에 대해 확신 할 수는 없습니다. 그것은 단지 OP의 환상일지도 모른다. –

답변

11

, 문자열은 null 바이트하지 말을한다. 예를 들어, $s = 'a';echo $s[1];은 경고 메시지를 표시합니다 (그 이유는 $a[$length] == ""으로 테스트하면 안됩니다). 또한, PHP 문자열은 null 바이트를 포함 할 수 있습니다 - 그들은 정말로 바이트 배열입니다. 널 바이트가 구현 세부입니다

$a = "a\0b\0c"; 
for ($length = 0;isset($a[$length]);$length++) ; 
echo $length; // 5 
3
$string = 'hello'; 
$length = 0; 
while (isset($string[$length])) { 
    $length++; 
} 
echo $length; //5 
+0

문자열에 숫자 0이 있으면 작동하지 않습니다. 그것은 $ length = 0과 같아야합니다; while ($ string [$ length]! = "") { $ length ++; } – DraggonZ

+0

@ draggonz, 제 편집을보세요. – pltvs

+0

이것은 'NUL'바이트와 아무 관련이 없습니다. 'isset ($ string [42])'는 같은 의미를가집니다. (['isset'] (http://php.net/manual/en/function.isset.php)의 문서에서 NUL은 NULL이 아닙니다.) –

관련 문제