PHPはリテラルキーで連想配列を追加しますか?


112

連想配列の先頭にリテラルのkey => valueペアを追加することは可能ですか?array_unshift()が数値キーで機能することは知っていますが、リテラルキーで機能するものを期待しています。

例として、以下を実行します。

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');

回答:


218

あなただけではできません:

$resulting_array = $array2 + $array1;


15
array_merge()と+演算子を使用した場合の違いも参照してください:br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@クレタス:シーシュ。ええ、できます。以前は何ができなかったのか、何がうまくいかなかったのかわかりません。ご返信ありがとうございます。
Colin Brock

違いは注目に値しますが、その違いは数値キーの保持に関連しており、この配列は文字列キーを持つ「純粋な」連想配列です。
cletus 2009

29

答えはいいえだ。連想配列にキーと値のペアを付加することはできません。

ただし、ユニオン演算子を使用して、配列の先頭に新しいキーと値のペアを含む新しい配列を作成できます+。結果はまったく新しい配列ですが、新しい配列を作成するとO(n)の複雑さになります。

構文は以下のとおりです。

$new_array = array('new_key' => 'value') + $original_array;

注:array_merge()は使用しないでください。array_merge()はキーを上書きし、数値キーを保持しません。


「キーを上書きし、数値キーを保持しない」... a)ユニオン演算子(「+」)は「重複」キーをどのように処理しますか?re:数字キーを保持しない:おそらく望ましい
Brad Kent

16

あなたの状況では、あなたはarray_merge()を使いたいです:

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

単一の値を付加するには、連想配列の場合、array_unshift()の代わりに、もう一度array_merge()を使用します。

array_merge(array($key => $value), $myarray);

5

@Cletusが登場しました。追加するだけで、入力配列の要素の順序があいまいであり、最終的な配列をソートする必要がある場合は、ksortを使用できます。

$resulting_array = $array1 + $array2;
ksort($resulting_array);

4
後半注意点として、ksort上記のニーズは二つの文ではない1つ、例えばとして行われるので、戻りは、ブール$a = $array1 + $array2; ksort($a);、そうでない場合は$resulting_arrayブール値ではない、あなたが期待していた配列になります。
El Yobo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.