2016-07-18 13 views
1

I次のエラーメッセージが表示されます未定義エラーをオフセット

不定オフセット:

$nbrProgrammingsRemoved = 0; 
    for($i = 0; $i<count($this->products); $i++){ 
     if((($this->products[$i])->id)==$id){ 
      array_splice($this->products, $i, 1); 
      for($j = 0; $j<count($this->programming); $j++){ 
    /*ERROR LINE*/ if((($this->programming[$j]->out_prod_id)==$id) || (($this->programming[$j]->in_prod_id)==$id)){ 
       $nbrProgrammingsRemoved++; 
       array_splice($this->programming, $j, 1); 
      } 
      } 
      return true; 
     } 
    } 
    return false; 
:1

それがコードブロックにポイントを

特に、エラーは最も内側のifステートメントを指します。 (その中に "||"が付いたもの)。

ここで重要なのは、このエラーはではなく、が常に発生することです。

foreach ($this->programming as $key => &$prog) { 
    if($prog->in_prod_id == $in_prod_id){ 
     if($prog->in_index == $in_index){ 
     unset($this->programming[$key]); 
     } 
    } 
} 

このコードの目的は、私の配列で私のオブジェクトを反復処理し、特定のIDに関連付けられたものを削除することです:今まで次のコードが実行された後に起こります。これは、私のウェブサイトの出力が期待どおりであるために機能するように見えます。これを実行した後で、エラーが発生した最初のコードブロックを実行しようとするときだけです。

私はこの問題のトラブルシューティングをしばらくは試してみましたが、成功しませんでした。何か案は?投稿するために必要な情報は何ですか?

編集:必要に応じて、第1コードブロックが配列を反復処理して、指定されたIDの単一要素を削除します。 2番目のコードブロックは別の配列を反復し、いくつかの要素を削除します。

+0

次のように変更されます: - 'if(isset($ this-> programming [$ j])&&(($ this-> programming [$ j] - > out_prod_id)== $ id)||(($ this - >プログラミング[$ j] - > in_prod_id)== $ id))){'角括弧 –

+0

@Anantありがとう!これは、それを解決するための1つの方法でした。ループが下の答えでConstantineUAによって記述されているように、私の要素の削除が原因で不足しているインデックスの問題をバイパスしました。 –

答えて

1

私の知る限り理解し、あなたが順番に来たインデックスを持つ配列を持っている:

$programming = array(
    0 => ..., 
    1 => ..., 
    2 => ..., 
); 

いくつかの時点で、あなたは未設定の一つの要素ので、あなたの配列は次のようになります。

$programming = array(
    0 => ..., 
    2 => ..., 
); 

そして、forループを使用して、0からN-1までのすべての数値(0,1,2,3,4 ...など)を繰り返し、すべてのインデックスが満たされていると仮定します。

私は最良の解決策は、インデックスを自動的に気にし、削除されたアイテムをバイパスするので、この場合foreachループを使用することだと思います。

+0

これは確かに私の配列のプロパティを調べて確認した問題でした。私はforeachを使ってこれを回避するか、Anantが説明したようにissetチェックを使うことができます。ただし、追加の質問にお答えしますか?この問題が完全に排除されるように、問題のアレイを「再インデックスする」方法がありますか? –

+1

@AdrianHansson削除後に '$ foo = array_values($ foo);' –

+0

@Anantありがとうございます!これで私の質問はすべて解決しました! –

関連する問題