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');

Jawaban:


219

Tidak bisakah Anda melakukan:

$resulting_array = $array2 + $array1;

?


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.


"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);

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);

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 [].

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.