Примечание PHP: Неопределенное смещение: -1, а цикл и фатальная ошибка PHP: недостаточно памяти - PullRequest
0 голосов
/ 15 февраля 2011

Ну, как и в названии, у меня проблема из-за этих вещей. Проблема возникает из-за строки X, которая while ($right[count($right)-1]<$row['rgt']) {, и это в функции display_tree из Обход дерева SitePoint .

Функция работала хорошо, но я не знаю, почему она вдруг начала выдавать эту фатальную ошибку.

Я пытался использовать error_reporting(-1);, чтобы понять, что может быть причиной ошибки, и новый журнал ошибок показывает мне, что я получаю Уведомление PHP несколько раз, как в незавершенном цикле, до точки, где я получаю Ошибка «Недостаточно памяти».

Странно то, что до двух дней назад это работало идеально, потому что, когда я выдергиваю свои волосы, чтобы разгадать причину проблемы.

Любой способ понять, что именно вызывает проблему? или может быть какие-то другие полезные советы?

Вот цикл while внутри своего состояния:

if (count($right)>0) {
$j=0;
while ($right[count($right)-1]<$row['rgt']) {  
  array_pop($right);
   $j++;
  }   
}

Спасибо, ребята.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Для начала, уведомление Undefined offset: -1 предполагает, что массив $right пуст.

Редактировать: В вашем цикле вы нажимаете $array до нуля ...гарантированно не удастся.Необходимо остановить цикл до того, как массив станет пустым.

Это решит насущную проблему, но вряд ли (само по себе) заставит вашу программу работать:

while ($right && $right[count($right)-1]<$row['rgt']) {

С end($right)возвращает то же значение $right[count($right)-1], мы можем упростить это до:

while ($right && end($right) < $row['rgt']) {
0 голосов
/ 15 февраля 2011

Если вы полностью следуете функции точек сайта, я полагаю, что причина ошибки в том, что ваше дерево повреждено.

Еще одна причина полагать, что ваше дерево повреждено, это то, что вы говорите, что код работалХорошо, несколько дней назад ...

Я тестировал вашу функцию в дереве точек сайта, и она, кажется, работает нормально.

Функция не выполняет никакой проверки для поврежденного дерева,Условие цикла while, которое вы впервые указали, никогда не должно достигать ситуации, когда $ right пуст.

...