Assoziatives PHP-Präfix-Array mit Literalschlüsseln?


112

Ist es möglich, ein assoziatives Array mit Literalschlüssel => Wertepaaren voranzustellen? Ich weiß, dass array_unshift () mit numerischen Schlüsseln funktioniert, aber ich hoffe auf etwas, das mit Literalschlüsseln funktioniert.

Als Beispiel möchte ich Folgendes tun:

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

// prepend magic

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

Antworten:


217

Kannst du nicht einfach tun:

$resulting_array = $array2 + $array1;

?


15
Siehe auch array_merge () und seinen Unterschied zur Verwendung des Operators +: br.php.net/manual/en/function.array-merge.php#92602
— Havenard

2
@cletus: Meine Güte. Ja, ich kann. Ich bin mir nicht sicher, warum ich dachte, ich könnte nicht oder was funktionierte vorher nicht. Danke für die Antwort.
— Colin Brock

Es ist erwähnenswert, dass dieser Unterschied für die Beibehaltung numerischer Schlüssel relevant ist, und dieses Array ist ein "reines" assoziatives Array mit Zeichenfolgenschlüsseln.
— Cletus

29

Die Antwort ist nein. Sie können einem assoziativen Array kein Schlüssel-Wert-Paar voranstellen.

Sie können jedoch mit dem Vereinigungsoperator ein neues Array erstellen, das das neue Schlüssel-Wert-Paar am Anfang des Arrays enthält +. Das Ergebnis ist jedoch ein völlig neues Array, und das Erstellen des neuen Arrays ist O (n) komplex.

Die Syntax ist unten.

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

Hinweis: Verwenden Sie nicht array_merge (). array_merge () überschreibt Schlüssel und behält keine numerischen Schlüssel bei.


"überschreibt Schlüssel und behält keine numerischen Schlüssel bei" ... a) Wie geht der Vereinigungsoperator ("+") mit "doppelten" Schlüsseln um? re: Zifferntasten nicht beibehalten: wahrscheinlich erwünscht
— Brad Kent

16

In Ihrer Situation möchten Sie array_merge () verwenden:

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

Verwenden Sie wieder array_merge (), um einem assoziativen Array anstelle von array_unshift () einen einzelnen Wert voranzustellen:

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

5

@Cletus ist genau richtig. Nur um hinzuzufügen, wenn die Reihenfolge der Elemente in den Eingabearrays nicht eindeutig ist und Sie das endgültige Array sortieren müssen, möchten Sie möglicherweise ksort :

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

4
Als späte Anmerkung wird ksortboolean zurückgegeben, daher muss das oben Gesagte als zwei Anweisungen ausgeführt werden, nicht als eine, z. B. $a = $array1 + $array2; ksort($a);ist $resulting_arraydies ein boolescher Wert, nicht das Array, das Sie erwartet haben.
— El Yobo

3

Mit der gleichen Methode wie @mvpetrovich können Sie die Kurzversion eines Arrays verwenden, um die Syntax zu verkürzen.

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

Verweise:

PHP: array_merge ()

PHP: Arrays - Handbuch

Ab PHP 5.4 können Sie auch die kurze Array-Syntax verwenden, die array () durch [] ersetzt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.