2016-03-05 5 views
-7

Код в основном помогает узнать, является ли число 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

Примечание: Неопределенное смещение: 1 в папке проектов D: \ wamp \ www \ PHP \ palindrome_numbers.php в строке 24 –

ответ

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, представляя, что вход является палиндром
+0

эй Лайош, спасибо, что код работает. Да, я думаю, я был очень близок к тому, что вы здесь разместили. Но мне просто нужно знать, чтобы понять, что вы имеете в виду, используя $ different = false? и что это означает/его последствия? Не могли бы вы объяснить, .... –

+0

@SricharanKrishnan, вне курса. Ваш код не удался, когда вы попытались проверить, похожи ли массивы. Лучший способ сделать это - найти первую разницу. Когда вы его найдете, вы знаете, что это не палиндром. Если вы не обнаружили разницы, то массивы схожи, поэтому это палиндром.$ difference является ложным в начале, так как разницы не было найдено. Когда мы находим первое различие, мы устанавливаем его в true. Если после цикла все еще ложно, массивы подобны. Если мой ответ решит проблему, вы можете подумать о ее принятии :) –

+1

эй Лайош, это действительно здорово. Большое вам спасибо за вашу помощь. Это имеет смысл. Yup звучит хорошо и молиться за меня, что я становлюсь хорошим, как вы. Просто надеюсь, что все будет хорошо для меня! Хорошего дня. –