我需要我的处理函数来接收整个原始数组减去1个值,我将在循环中删除它。但是,下一次调用需要添加原始值并删除下一个值。
数组键是非数字的,所以我不能使用for循环,因为我需要键值。下面是我发送到处理函数()的数组。
$stuff = array(
'inner'=>array('A=>Alpha','B=>Beta','C=>Charlie'),
'outer'=>array('C=>Cat','D=>Dock','K=>Kite')
);
This is what the processing function should receive during each loop iteration.
Loop 1: array( 'inner'=>array('B=>Beta','C=>Charlie'), 'outer'=>array('C=>Cat','D=>Dock','K=>Kite') ) Loop 2: array( 'inner'=>array('A=>Alpha','C=>Charlie'), 'outer'=>array('C=>Cat','D=>Dock','K=>Kite') ) Loop 3: array( 'inner'=>array('A=>Alpha','B=>Beta'), 'outer'=>array('C=>Cat','D=>Dock','K=>Kite') )
CODE:
导致无限循环,因为每个值都会立即添加到结尾。
foreach($stuff as $term=>&$arr)
{
switch($term)
{
case 'inner':
foreach($arr as $key=>$value)
{
//remove value
unset($arr[$key]);
processing($stuff);
//add it back
$arr[$key] = $value;
}
break;
}
}
使它再运行一次:
foreach($stuff as $term=>&$arr)
{
switch($term)
{
case 'inner':
$last_key = end(array_keys($arr));
foreach($arr as $key=>$value)
{
unset($arr[$key]);
processing($stuff);
//put it BACK
if($key != $last_key)
{
$arr[$key] = $value;
}
}
break;
}
}
解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
您可以遍历内部项目并每次创建数组的新副本,然后unset
当前密钥。使用这种方法,您不必担心在迭代它时从原始数组中添加/删除项目。
$items = ['A', 'B', 'C'];
foreach ($items as $key => $item) {
$otherItems = $items;
unset($otherItems[$key]);
print_r($otherItems);
}