Код ниже в основном помогает выяснить, является ли число 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. Однако, если ваш 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
, представляющий, что вход является палиндромомДругих решений пока нет …