对于同一个数组,我有一个内循环,但是在内循环中我删除了一些元素,新数组被分配给主数组,但是问题发生了,主循环索引仍然不变!
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
用while (list($index, $mainNewsletterObj) = each($newsletters))
代替foreach ($newsletters as $index=>$mainNewsletterObj)
不要改变原来的数组!在进入循环之前创建该数组的副本,然后在需要的地方从副本中删除元素。