2011-11-03 44 views
2

如何查找PHP字符串的结尾?我有一项任务:识别没有任何功能的字符串长度。我知道PHP中的所有字符串都以空字节结尾(\0),但我无法知道最后一个符号后面的字符串元素。检测字符串的末尾而不使用函数

例如,这是不行的:

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

如何知道字符串的长度,不使用任何功能呢?

+3

那空字节是一个实现细节。我不认为你最后可以访问空字节。 PHP不是C.可能是错误的,但我不认为你的方法会起作用。 – Joe

+2

@evilone我怀疑任何理智的教育者会向学生介绍所有语言的* php *编程。 – phihag

+1

@爱哈格虽然我同意你的观点,但你不能确定教育者,由一些奇怪的问题来判断。这可能只是OP的幻想。 –

回答

11

在PHP中,字符串最终以空字节。例如,$s = 'a';echo $s[1];会产生警告(这就是为什么您不应该使用$a[$length] == ""进行测试)。此外,PHP字符串可以包含空字节 - 它们确实是字节数组。

但是,您可以使用的语言构造isset测试是否阅读$a[$length]值会产生警告:

$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。) – 2011-11-03 15:54:20