リテラル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');
あなただけではできません:
$resulting_array = $array2 + $array1;
?
答えはいいえだ。連想配列の先頭にキーと値のペアを追加することはできません。
ただし、ユニオン演算子+
を使用して、配列の先頭に新しいキーと値のペアを含む新しい配列を作成できます。結果は完全に新しい配列ですが、新しい配列を作成するとO(n)の複雑さがあります。
構文は次のとおりです。
$new_array = array('new_key' => 'value') + $original_array;
注:array_merge()は使用しないでください。 array_merge()はキーを上書きし、数値キーを保持しません。
あなたの状況では、array_merge()を使用します:
array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'Apple', 'fruit4'=>'orange'));
連想配列の場合、array_unshift()の代わりに単一の値を追加するには、再度array_merge()を使用します。
array_merge(array($key => $value), $myarray);
@Cletusが注目されています。入力配列の要素の順序があいまいで、最終的な配列を並べ替える必要がある場合は、追加するだけで、 ksort :
$resulting_array = $array1 + $array2;
ksort($resulting_array);
@mvpetrovichと同じ方法を使用すると、配列の短縮形を使用して構文を短縮できます。
$_array = array_merge(["key1" => "key_value"], $_old_array);
参照:
PHP 5.4の時点で、array()を[]に置き換える短い配列構文を使用することもできます。