0

假设我有一个 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
);

或者

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

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

4

2 回答 2

2

这难道不是诀窍吗?

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

这将导致您的选项 #2

我没有做过任何基准测试,但我知道这isset()in_array()许多情况下要快;有些东西告诉我isset()vs是一样的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()因此,仅当(且仅当)您经常使用时,总执行时间才会减少。

于 2013-06-27T17:31:25.433 回答
0

这个:

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

应该做的伎俩。

于 2013-06-27T17:34:33.200 回答