2012-09-18 78 views
1

我有一个不同部门的多维数组,并且想要使用foreach循环遍历它,但出于某种原因,foreach循环通过每次迭代获取第一个键下的值。PHP foreach卡在第一个键的值

数组是这样的:

$departmentArray = 

Array 
(
    [0] => Array 
     (
      [dpt_id] => 5 
      [dpt_name] => Administration 
      [dpt_employees] => Array 
       (
       [0] => Array 
        (
         [started] => 2000-06-01 
         [stopped] => 9999-99-99 
         [empl_id] => 21 
        ) 

       [1] => Array 
        (
         [started] => 2000-06-01 
         [stopped] => 2010-01-01 
         [empl_id] => 23 
        ) 
      ) 
    ) 

    [1] => Array 
     (
      [dpt_id] => 6 
      [dpt_name] => Warehouse 
      [dpt_employees] => Array 
       (
       [0] => Array 
        (
         [started] => 2000-10-01 
         [stopped] => 2012-01-01 
         [empl_id] => 30 
        ) 

       [1] => Array 
        (
         [started] => 2007-10-17 
         [stopped] => 9999-99-99 
         [empl_id] => 197 
        ) 
      ) 
    ) 
) 

而且foreach循环是这样的:

foreach($departmentArray as $key => $value) { 

    print_r($key); 
    print_r($value['dpt_name']); 

} 

而这种打印:

0 Administration 1 Administration. 

有谁知道,为什么环不会在数组中向前移动,并在第二次迭代期间在键/索引1下抓取值(仓库)?

+4

不,这*代码不会打印。如果你自己的代码打印出来,你正在做一些不同的事情。可能通过引用迭代并更改值? – Jon

+0

谢谢你的回答。你是对的,我在代码中通过引用进行迭代,在这里我使用相同的名称,现在我将研究它。 – acrmuui

回答

2

总刺到黑暗:

您已经在foreach循环使用$value之前作为参照,就像这样:

foreach ($foo as &$value) { ... } 

foreach ($departmentArray as $key => $value) { ... } 

这是引用的众所周知的副作用。 unset($value)第一次循环后。

+0

谢谢你在黑暗中刺,我认为你是对的,因为我通过参考前面的代码迭代。我应该在大括号内的第一个循环中取消设置$值吗? – acrmuui

+1

好的,我明白了,谢谢你的帮助! – acrmuui