PHP在循环

时间:2016-01-14 23:18:13

标签: php arrays

我需要我的处理函数来接收整个原始数组减去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;
           }
       }

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以遍历内部项目并每次创建数组的新副本,然后unset当前密钥。使用这种方法,您不必担心在迭代它时从原始数组中添加/删除项目。

$items = ['A', 'B', 'C'];

foreach ($items as $key => $item) {
    $otherItems = $items;
    unset($otherItems[$key]);

    print_r($otherItems);
}