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.