将元素添加到数组的所有空键


Add elements to all empty keys of an array

我使用以下代码用``填充子数组中的所有空键:

$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);

问题是它实际上并没有改变$array中的元素,而是在临时变量$iterator中。

我知道这是一个简单的问题,但我想找出最佳和最快的解决方案。

你不需要$iterator变量,你可以只做:

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] = '';
        }
      }
    }

看起来你有一些错别字。 循环中间的$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] = '';
    }
  }
}