我不知道如何处理这个PHP代码

时间:2016-03-05 12:13:55

标签: php error-handling fatal-error palindrome

以下代码基本上有助于找出数字是否为Palindromic Number。虽然我通过输出完成了我的执行,但我似乎可以处理所有的"尖叫"我得到的致命错误。我该如何处理呢只是一个初学者和信任,你可以用我能够理解的方式解释..

<?php

    for ($num = 1; $num <= 20; ++$num){

        $_array1 = str_split($num);
        //print_r($_array1);
        //echo "<br/>";

        $_array2 = array_reverse($_array1);
        //print_r($_array2);
        //echo "<br/>";

        $i = 0;
        $j = 0;

        while ($i < sizeof($_array1) && $j < sizeof($_array2)){
            if ($_array1[$i] == $_array2[$j]){
            ++$i;
            ++$j;
        }

        }

        if ($_array1[$i] == $_array2[$j]){
            echo "The number $num is a Palindrome Number";
        }
    }

?>

1 个答案:

答案 0 :(得分:1)

你得到元素的大小,即1.但是,如果你的array只有一个元素(1位数字就是这种情况),那么sizeof($_array) === 1。这意味着您可以使用的最大可能索引是0.您需要将代码更改为以下内容:

<?php

    for ($num = 1; $num <= 20; ++$num){

        $_array1 = str_split($num);
        //print_r($_array1);
        //echo "<br/>";

        $_array2 = array_reverse($_array1);
        //print_r($_array2);
        //echo "<br/>";

        $i = 0;
        $j = 0;

        $different = false;
        while ((!$different) && ($i < sizeof($_array1))){
            if ($_array1[$i] == $_array2[$j]){
            ++$i;
            ++$j;
        } else {
            $different = true;
        }

        }

        if (!$different){
            echo "The number $num is a Palindrome Number";
        }
    }

?>

但是你正在反转array而不需要这样做而且你正在循环不必要的长时间。我建议用function来确定数组是否是回文:

function isPalindrome($input) {
    $size = count($input);
    for ($index = 0; $index < $size / 2; $index++) {
        if ($input[$index] != $input[$size - $index - 1]) {
            return false;
        }
    }
    return true;
}

请注意:

  • function假设array的键是数字
  • function使用单个array
  • array的大小存储在局部变量中,不会重复计算
  • 循环周期一直到array的一半,因为!=运算符
  • 的对称特性超出了这个范围是不必要的
  • function在找到第一个差异时返回false,以进一步优化检查
  • 如果没有差异,function会返回true,表示输入是回文