2012-09-18 112 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