【问题标题】:I dont know what to do with this PHP Code我不知道如何处理这个 PHP 代码
【发布时间】:2016-06-19 05:54:15
【问题描述】:

下面的代码基本上有助于找出一个数字是否为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";
        }
    }

?>

【问题讨论】:

  • 你遇到了什么错误?
  • SCREAM:忽略错误抑制:
  • 注意:未定义的偏移量:D:\wamp\www\PHP Projects Folder\palindrome_numbers.php 第 24 行中的 1
  • 哪一行是24?
  • if ($_array1[$i] == $_array2[$j])

标签: php error-handling fatal-error palindrome


【解决方案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,表示输入是回文

【讨论】:

  • 嘿 Lajos,谢谢您的代码正在运行。是的,我想我和你放在这里的那个很接近。但我只需要知道才能理解,使用 $different = false 是什么意思?它是什么意思/它的含义?你能解释一下吗,....
  • @SricharanKrishnan,当然。您的代码在您尝试检查数组是否相似时失败。最好的方法是搜索第一个差异。当你找到它时,你知道它不是回文。如果你没有发现差异,那么数组是相似的,所以它是一个回文。 $difference 一开始是假的,因为还没有发现差异。当我们找到第一个差异时,我们将其设置为 true。如果在循环之后它仍然是假的,那么数组是相似的。如果我的回答解决了问题,你可以考虑接受它:)
  • 嘿 Lajos,这真的很棒。非常感谢你的帮助。这是有道理的。是的,听起来不错,请为我祈祷,我变得和你一样好。只是希望事情对我来说会好起来!祝你有美好的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2021-10-30
  • 1970-01-01
  • 2017-06-02
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多