在不使用strlen()的情况下计算字符串长度时未初始化的字符串偏移量

时间:2014-09-16 16:41:56

标签: php strlen

<?php

$a = "Hello World I am Neha Singh Chouhan";
$length = 0;  
do {
    $length++; 
}
while ($a[$length] != null);
echo "Length = ".$length."<br/>";
for ($i = $length - 1; $i >= 0; $i--) {
    echo $a[$i]; 
}

?>

尝试计算字符串长度而不使用内置函数strlen()。

输出

  

注意:未初始化的字符串偏移:第7行的C:\ xampp \ htdocs \ Neha \ ProgramsFromClass \ 10_reverse_string.php中的35   长度= 35   nahuohC hgniS aheN ma ma dlroW olleH

导致通知的原因是什么?如何摆脱它?

1 个答案:

答案 0 :(得分:0)

你的循环不正确。您开始使用$length 之前增加,然后运行字符串的结尾。因此,您正在测试偏移量1,2,3,...n,其中n是字符串末尾的偏移量。

由于您正在测试一个不存在的“数组”键,无论您如何看待它,即使在交换循环类型之后,您也总是会收到错误。

do / while是 NOT 用于此的循环。您需要简单的while循环,而是使用isset()代替:

$length = 0;
while(isset($a[$length])) { $length++; }