PHP - 只合并数组的键?

时间:2013-06-27 17:30:09

标签: php arrays

假设我有一个PHP数组:

$array1 = array(
   'protein' => array('PROT', 100, 150),
   'fat'     => array('FAT',  100, 250),
   'carbs'   => arary('CARBS', 10, 20)
);

$array2 = array(
   'vitaminA' => array('vitA', 1, 2),
   'vitaminB' => array('vitB', 1, 2),
   'vitaminC' => arary('vitC', 1, 2)
);

现在我想要这些营养素的组合数组(类似array_merge()),但我只需要键,而不是值本身。

所以要么:

$combined = array(
   'protein' => NULL,
   'fat'     => NULL,
   'carbs'   => NULL,
   'vitaminA'=> NULL,
   'vitaminB'=> NULL,
   'vitaminC'=> NULL
);

OR

$combined = array('protein', 'fat', 'carbs', 'vitaminA', 'vitaminB', 'vitaminC');

我可以使用foreach循环手动执行此操作,但我希望有一个功能可以使此过程快速优化。

2 个答案:

答案 0 :(得分:2)

这不会成功吗?

$combined = array_merge(array_keys($array1), array_keys($array2));

这会产生选项#2

我没有做任何基准,但我知道isset()在很多情况下比in_array()更快;有些东西告诉我,isset()array_key_exists()的情况相同。如果这很重要,你可以尝试使用它:

$combined = array_flip(array_merge(array_keys($array1), array_keys($array2)));

这会导致类似这样的事情:

$combined = array(
    'protein' => 1,
    'fat'     => 2,
    'carbs'   => 3,
    'vitaminA'=> 4,
    'vitaminB'=> 5,
    'vitaminC'=> 6
);

这样您就可以使用isset(),例如选项#1

#edit 我对所有三个提到的函数的性能进行了一些研究,大多数(如果不是全部)案例研究表明isset()是最快的(1 },2);主要是因为它实际上不是一种功能,而是一种语言结构。

但请注意,我们现在使用array_flip()来使用isset(),因此我们会丢失相当于几微秒来翻转数组;因此,如果(并且仅当)经常使用isset(),总执行时间才会减少。

答案 1 :(得分:0)

此:

function array_merge_keys($arr1, $arr2) {
    return array_merge(array_keys($arr1), array_keys($arr2));
}

应该这样做。