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

Posted

技术标签:

【中文标题】我不知道如何处理这个 PHP 代码【英文标题】:I dont know what to do with this PHP Code 【发布时间】: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]) 【参考方案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,这真的很棒。非常感谢你的帮助。这是有道理的。是的,听起来不错,请为我祈祷,我变得和你一样好。只是希望事情对我来说会好起来!祝你有美好的一天。

以上是关于我不知道如何处理这个 PHP 代码的主要内容,如果未能解决你的问题,请参考以下文章

git status 给了我一些令人困惑的 iOS 配置文件,我不知道如何处理 [重复]

我不知道如何处理 SocketException 以满足我的需要

PHP XML RPC - 如何处理返回的数组

不知道如何处理大型数据库

php actionscript bitMapData 发布图片

了解开发人员如何处理棕地项目