2012-06-19 149 views
0

我使用以下代碼來填充在子陣列的所有空鍵與``的所有空鍵:添加元素添加到數組

$array = array(
     'note' => array('test', 'test1'), 
     'year' => array('2011','2010', '2012'), 
     'type' => array('conference', 'journal', 'conference'), 
    ); 

foreach ($array['type'] as $k => $v) { 
    foreach($array as $element => $a) { 
    $iterator = $array[$element]; 
    if(!isset($iterator[$k])){  
     $iterator[$key] = ''; 
    } 
    } 
} 

的print_r($陣列);

問題是,它實際上並未更改$array中的元素,而是臨時變量$iterator中的元素。

我知道這是一個簡單的問題,但我想找出最好的和最快的解決方案。

+0

它真的打算在外部循環中處理內部數組,反之亦然嗎? – raina77ow

回答

2

您不需要$迭代變量,你可以做:

foreach ($array['type'] as $k => $v) { 
    foreach($array as $element => $a) { 
    if(!isset($array[$element][$k])){  
     $array[$element][$key] = ''; 
    } 
    } 
} 

我也建議切換內外循環,所以它的可讀性更強,更高效。

foreach($array as $element => $a) { 
     foreach ($array['type'] as $k => $v) { 
     if(!isset($array[$element][$k])){  
      $array[$element][$key] = ''; 
     } 
     } 
    } 
+0

其實,這有點奇怪,我不知道我是否理解你真正想要什麼,如果你能發佈你想要你的最終陣列在你的例子上,會不錯。 –

2

看起來像你有一些錯別字。在循環中間的$key永遠不會被定義。 $a應該和$iterator[$k]的值相同,所以不需要設置它。

試試這個。

$array = array(
     'note' => array('test', 'test1'), 
     'year' => array('2011','2010', '2012'), 
     'type' => array('conference', 'journal', 'conference'), 
    ); 

foreach ($array as $k => $v) { 
    foreach($k as $element => $a) { 
    if(!isset($a)){  
     $array[$element] = ''; 
    } 
    } 
} 
+0

什麼是外環在這裏做? – raina77ow

+0

@ raina77ow,數組嵌套。它走2層深。 – sparebytes

+1

感嘆..好吧,我會問你在代碼中如何使用'$ k'和'$ v'變量。 – raina77ow