0

さて、タイトル通り、そういうことで困っています。この問題は、X行が原因で発生しています。これはSitePointのツリートラバーサルのwhile ($right[count($right)-1]<$row['rgt']) {関数display_treeにあります。

この関数はうまく機能していましたが、なぜ突然この致命的なエラーが発生し始めたのかわかりません。

を使用してエラーの原因を理解しようとしerror_reporting(-1);ましたが、新しいエラーログには、PHP通知が未完了のループのように、メモリ不足エラーが発生するまで何度も表示されていることが示されています。

奇妙なことに、これは2日前まで完全に機能していました。なぜなら、問題の原因を解読するために髪の毛を抜いていたからです。

問題の原因を正確に理解する方法はありますか?または他の役立つヒントがありますか?

条件内のwhileループは次のとおりです。

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

みんなありがとう。

4

2 に答える 2

2

手始めに、通知は配列が空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']) {
于 2011-02-15T09:24:42.450 に答える
0

サイトポイント機能を完全にフォローしている場合、エラーの原因はツリーが破損していることだと思います。

ツリーが破損していることを示唆するさらに多くの理由は、コードが数日前に正常に機能していたと言うことです...

サイトポイントツリーで関数をテストしましたが、正常に動作しているようです。

この関数は、破損したツリーのチェックを行いません。最初に指摘したwhileループ条件は、$rightが空の状況に決して到達しないはずです。

于 2011-02-15T09:35:21.407 に答える