为什么此函数会生成未初始化的字符串偏移通知?

时间:2018-04-25 18:56:38

标签: php

我运行程序时遇到此错误:

  

注意:未初始化的字符串偏移量:第21行的C:\ xampp \ htdocs \ demo \ str_rev.php中为7

是什么导致的?

<?php

    //strrev($arg);
    /*$str = "ademola";
    echo strrev("$str");
    */

    function reverse_String($str){
        $i = 0;
        while(!empty($str[$i])){
            echo $str[$i];
                $i++;
        }


        for($r = $i; $r > -1; $r--){
            $reverse = $str[$r];
            echo $reverse;

        }
    }

    reverse_String("Ademola");
?>

输出:

  

Ademola
  Notice: Uninitialized string offset: 7 in C:\xampp\htdocs\demo\str_rev.php on line 21
  alomedA

2 个答案:

答案 0 :(得分:1)

您的第一个$i++;循环中的while在其上一次迭代中将$i增加到7。条件!empty($str[$i])不再满足,因此循环不会再次执行,但是当下一个循环开始时$i仍为7,这是超出字符串结尾的索引。

有多种方法可以解决这个问题,一种简单的方法是在定义第二个循环时将$r设置为字符串中最后一个字符的索引,从计数器中减去1。

for($r = $i - 1; $r > -1; $r--){ ...

答案 1 :(得分:0)

正如Do not Panic所提到的,有很多方法可以解决这个问题, 你可以使用isset作为: -

    for($r = $i; $r > -1; $r--){
        if(isset($str[$r])) {
            $reverse = $str[$r];
            echo $reverse;
        }
    }

或者要反转字符串,你可以简单地使用php的内置函数(strrev

echo strrev('Ademola')