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()よりも高速であることはわかっています。vsin_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上記の 3 つの関数すべてのパフォーマンスについていくつか調査を行いましたが、すべてではないにしてもほとんどのケース スタディで、それisset()がすべての中で最速であることが示されています ( 12 )。主に、実際には関数ではなく言語構造であるためです。

ただし、 をarray_flip()使用できるようにisset()なったため、配列を反転するためにかなりの数マイクロ秒を失うことに注意してください。isset()したがって、合計実行時間は、頻繁に使用する場合にのみ減少します。

于 2013-06-27T17:31:25.433 に答える