PHP menambahkan array asosiatif dengan kunci literal?

112

Apakah mungkin untuk menambahkan array asosiatif dengan pasangan nilai kunci => literal? Saya tahu bahwa array_unshift () bekerja dengan tombol numerik, tapi saya berharap sesuatu yang akan bekerja dengan kunci literal.

Sebagai contoh, saya ingin melakukan hal berikut:

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

// prepend magic

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

Jawaban:

219

Tidak bisakah Anda melakukan:

$resulting_array = $array2 + $array1;

?

cletus
sumber
15
Lihat juga array_merge () dan perbedaannya dari penggunaan operator +: br.php.net/manual/en/function.array-merge.php#92602
Havenard
2
@cusung: Sheesh. Ya aku bisa. Tidak yakin apa yang membuat saya berpikir saya tidak bisa atau tidak bekerja sebelumnya. Terima kasih atas tanggapannya.
Colin Brock
Perlu diperhatikan perbedaannya tetapi perbedaan itu relevan untuk mempertahankan kunci numerik dan array ini adalah array asosiatif "murni" dengan kunci string.
cletus
29

Jawabannya adalah tidak. Anda tidak dapat menambahkan array asosiatif dengan pasangan nilai kunci.

Namun Anda bisa membuat larik baru yang berisi pasangan nilai kunci baru di awal larik dengan operator gabungan +. Hasilnya adalah array yang sama sekali baru dan membuat array baru memiliki kompleksitas O (n).

Sintaksnya ada di bawah.

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

Catatan: Jangan gunakan array_merge (). array_merge () menimpa kunci dan tidak menyimpan kunci numerik.

PHPguru
sumber
"menimpa kunci dan tidak mempertahankan kunci numerik" ... a) bagaimana operator gabungan ("+") menangani kunci "duplikat"? re: tidak menyimpan kunci numerik: mungkin diinginkan
Brad Kent
16

Dalam situasi Anda, Anda ingin menggunakan array_merge ():

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

Untuk menambahkan satu nilai, untuk array asosiatif, alih-alih array_unshift (), gunakan lagi array_merge ():

array_merge(array($key => $value), $myarray);
mvpetrovich.dll
sumber
5

@Cletus tepat. Sebagai tambahan, jika urutan elemen dalam larik masukan ambigu, dan Anda memerlukan larik terakhir untuk disortir, Anda mungkin ingin melakukan ksort :

$resulting_array = $array1 + $array2;
ksort($resulting_array);
karim79.dll
sumber
4
Sebagai catatan akhir, ksortmengembalikan boolean, jadi hal di atas perlu dilakukan sebagai dua pernyataan, bukan satu, misalnya $a = $array1 + $array2; ksort($a);, jika tidak, $resulting_arrayakan menjadi nilai boolean bukan array yang Anda harapkan.
El Yobo
3

Menggunakan metode yang sama seperti @mvpetrovich, Anda dapat menggunakan versi singkatan dari sebuah array untuk mempersingkat sintaks.

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

Referensi:

PHP: array_merge ()

PHP: Array - Manual

Pada PHP 5.4 Anda juga dapat menggunakan sintaks array pendek, yang menggantikan array () dengan [].

Bryce Gough
sumber