2012-06-19 76 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