0

同じ配列の内部ループがありますが、内部ループでいくつかの要素を削除すると、新しい配列がメイン配列に割り当てられますが、メインループのインデックスがまだ変更されていないという問題が発生します!

foreach ($newsletters as $index=>$mainNewsletterObj) {
    // var_dump($newsletters); // it prints new DATA !

         // the problem is here !
    echo 'up index is '.$index .'<br/>';  // it prints old index!!!!!!!!!!

      // make a copy of main array
      $newslettersArray = $newsletters; 

        //inner loop
     foreach ($newslettersArray as $key => $newsletterObj) {

    if ($newsletterObj['month'] == 3 );

         unset($newslettersArray[$key]);  //remove element
      } else
      {
     // make a new array of modified one to start index from 0
     $newslettersArray1 = array_values($newslettersArray); // to start index from 0

      // assign new modified array to the original one
     $newsletters = $newslettersArray1;

  }

}   // end inner loop

$index=0;
  echo 'down index is '.$index .'<br/>';  // it prints 0
 }  // end of outer loop

どんな助けでも大歓迎です!

4

2 に答える 2

0

while (list($index, $mainNewsletterObj) = each($newsletters))の代わりに使用foreach ($newsletters as $index=>$mainNewsletterObj)

于 2013-04-04T10:43:44.920 に答える
0

元の配列を変更しないでください! ループに入る前にその配列のコピーを作成し、必要に応じてコピーから要素を削除します。

于 2013-04-03T09:07:54.367 に答える