PHP, ilişkisel diziyi değişmez anahtarlarla başa mı ekler?


112

İlişkili dizinin başına değişmez anahtar => değer çiftleri eklemek mümkün müdür? Array_unshift () işlevinin sayısal anahtarlarla çalıştığını biliyorum, ancak değişmez anahtarlarla çalışacak bir şey umuyorum.

Örnek olarak şunları yapmak istiyorum:

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

// prepend magic

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

Yanıtlar:


219

Sadece yapamaz mısın:

$resulting_array = $array2 + $array1;

?


15
Ayrıca array_merge () ve + operatörünü kullanmaktan farkı: br.php.net/manual/en/function.array-merge.php#92602
— Havenard

2
@cletus: Sheesh. Evet yapabilirim. Beni yapamayacağımı veya daha önce neyin çalışmadığını düşündüren şeyin ne olduğundan emin değilim. Cevabınız için teşekkürler.
— Colin Brock

Farkı belirtmek gerekir, ancak bu fark sayısal anahtarların korunmasıyla ilgilidir ve bu dizi, dizgi anahtarları olan "saf" bir ilişkilendirilebilir dizidir.
— cletus

29

Cevap hayır. İlişkilendirilebilir bir dizinin başına anahtar / değer çifti ekleyemezsiniz.

Ancak, birleşim operatörüyle dizinin başında yeni anahtar-değer çiftini içeren yeni bir dizi oluşturabilirsiniz +. Sonuç tamamen yeni bir dizidir ve yeni diziyi yaratmanın O (n) karmaşıklığı vardır.

Sözdizimi aşağıdadır.

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

Not: array_merge () kullanmayın. array_merge () anahtarların üzerine yazar ve sayısal anahtarları korumaz.


"anahtarların üzerine yazar ve sayısal anahtarları korumaz" ... a) birleşim operatörü ("+") "yinelenen" anahtarları nasıl işler? re: sayısal tuşları
— Brad Kent

16

Sizin durumunuzda, array_merge () kullanmak istiyorsunuz:

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

İlişkilendirilebilir bir dizinin başına, array_unshift () yerine tek bir değer eklemek için, array_merge () işlevini tekrar kullanın:

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

5

@Cletus yerinde. Eklemek gerekirse, girdi dizilerindeki öğelerin sıralaması belirsizse ve sıralanacak son diziye ihtiyacınız varsa, ksort yapmak isteyebilirsiniz :

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

4
Geç bir not olarak, ksortboole döndürür, bu nedenle yukarıdakilerin bir değil iki ifade olarak yapılması gerekir, örneğin $a = $array1 + $array2; ksort($a);, aksi takdirde $resulting_arraybeklediğiniz dizi değil, bir boole değeri olacaktır.
— El Yobo

3

@Mvpetrovich ile aynı yöntemi kullanarak, sözdizimini kısaltmak için bir dizinin kısa versiyonunu kullanabilirsiniz.

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

Referanslar:

PHP: array_merge ()

PHP: Diziler - Manual

PHP 5.4'ten itibaren, dizi () 'yi [] ile değiştiren kısa dizi sözdizimini de kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.