web-dev-qa-db-ja.com

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

リテラル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');
110
Colin Brock

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

$resulting_array = $array2 + $array1;

203
cletus

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

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

構文は次のとおりです。

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

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

27
PHPguru

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

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

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

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

@Cletusが注目されています。入力配列の要素の順序があいまいで、最終的な配列を並べ替える必要がある場合は、追加するだけで、 ksort

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

@mvpetrovichと同じ方法を使用すると、配列の短縮形を使用して構文を短縮できます。

$_array = array_merge(["key1" => "key_value"], $_old_array);

参照:

PHP:array_merge()

PHP:配列-マニュアル

PHP 5.4の時点で、array()を[]に置き換える短い配列構文を使用することもできます。

1
Bryce Gough