我不知道该怎么做这个PHP代码

问题描述:

下面的代码基本上帮助找出一个数字是否是Palindromic Number或不。虽然我用输出完成了执行,但我似乎可以处理所有“尖叫”和我得到的致命错误。我该如何处理。只是一个初学者,相信你可以在某种程度上解释,我也许能够理解..我不知道该怎么做这个PHP代码

<?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"; 
     } 
    } 

?> 
+0

您收到了哪些错误? – Mureinik

+0

SCREAM:错误抑制忽略为: –

+0

注意:D:\ wamp \ www \ PHP Projects项目文件夹\ palindrome_numbers.php上的未定义偏移:1第24行 –

你到元素的大小,也就是1。然而,如果你的array只有一个元素,是一位数字的情况,然后是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,表示输入是回文
+0

嘿拉霍斯,谢谢你的代码工作。是的,我想我非常接近你放在这里的那个。但我只需要知道为了理解,你是什么意思,通过使用$不同=假?它的意义是什么?你能解释一下吗,...... –

+0

@Sricharan克里希南,当然。您尝试检查数组是否相似时,代码失败。最好的办法是搜索第一个区别。当你找到它时,你知道它不是回文。如果你没有发现任何区别,那么阵列是相似的,所以它是一个回文。$差异在开始时是错误的,因为没有发现任何差异。当我们找到第一个区别时,我们将其设置为true。如果在循环之后它仍然是错误的,那么这些数组是相似的。如果我的答案解决了这个问题,你可以考虑接受:) –

+1

嘿拉霍斯,这真的很棒。非常感谢你的帮助。这是有道理的。 Yup听起来不错,并且为我祈祷我变得和你一样好。只希望事情对我来说很好!祝你今天愉快。 –