假设我有一个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
循环手动执行此操作,但我希望有一个功能可以使此过程快速优化。
答案 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));
}
应该这样做。