2009-09-03 3 views
89

リテラルキー=>値のペアを連想配列の前に付けることはできますか?私はarray_unshift()が数値キーで動作することを知っていますが、私はリテラルキーで動作することを期待しています。PHPはリテラル・キーで連想配列を前に付ける?

例として、私は次の操作を実行したいと思います:

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

// prepend magic 

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

答えて

172

は、あなただけ行うことはできません。

$resulting_array = $array2 + $array1; 

+13

array_merge()も参照してください。+演算子との違いは次のとおりです。 http://br.php.net/manual/en/function.array-merge.php#92602 – Havenard

+2

@cletus:Sheesh。はい、できます。私に何ができないと思ったのか、以前は何ができていないのかは分かりません。応答していただきありがとうございます。 –

+1

@Havenard:追加情報をありがとう。 –

4

@Cletusが点在しています。ただ、入力配列の要素の順序があいまいであれば、追加して、あなたがksortしたい場合があり、最終的配列をソートする必要がします

あなたの状況で
$resulting_array = $array1 + $array2; 
ksort($resulting_array); 
+0

@karim:それは役に立ちます - ありがとう。 –

+4

最後の注記として、 'ksort'はブール値を返します。したがって、上記は2つのステートメントでなくてはなりません。 '$ a = $ array1 + $ array2; ksort($ a); 'それ以外の場合は' $ result_array'はあなたが期待していた配列ではないブール値になります。 –

13

は、あなたが(array_mergeを使用したいです):

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

代わりするarray_unshiftを、連想配列のために、単一の値を付加する()、再び)(array_mergeを使用:

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

答えがノーです。連想配列の前にキーと値のペアを付けることはできません。

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

構文は次のとおりです。

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

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