Stellen Sie assoziative Array-Elemente einem assoziativen Array voran

Lesezeit: 3 Minuten

Benutzeravatar von Colin Brock
Colin Rock

Ist es möglich, einem assoziativen Array wörtliche Schlüssel=>Wert-Paare voranzustellen? Ich weiß, dass array_unshift() mit numerischen Schlüsseln funktioniert, aber ich hoffe auf etwas, das mit wörtlichen Schlü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');

  • Siehe auch: Unterschiede zwischen array_replace() und array_merge() und + (array union operator)

    – mickmackusa

    10. November um 22:48 Uhr


Kannst du nicht einfach:

$resulting_array = $array2 + $array1;

?

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

    – Havenar

    3. September 2009 um 1:33 Uhr

  • @cletus: Meine Güte. Ja, ich kann. Ich bin mir nicht sicher, was mich glauben ließ, dass ich es nicht könnte oder was vorher nicht funktioniert hat. Danke für die Antwort.

    – Colin Brock

    3. September 2009 um 1:36 Uhr

  • Es ist erwähnenswert, den Unterschied zu beachten, aber dieser Unterschied ist für die Erhaltung numerischer Schlüssel relevant, und dieses Array ist ein “reines” assoziatives Array mit Zeichenfolgenschlüsseln.

    – Kletus

    3. September 2009 um 1:37 Uhr

Benutzeravatar von PHPguru
PHPguru

Sie können einem assoziativen Array nicht direkt ein Schlüssel-Wert-Paar voranstellen.

Sie können jedoch mit dem Union-Operator 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 hat eine O(n)-Komplexität.

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 numerische Schlüssel nicht bei” … a) Wie behandelt der Union-Operator (“+”) “doppelte” Schlüssel? Betreff: Zifferntasten nicht beibehalten: wahrscheinlich erwünscht

    – Brad Kent

    28. Mai 2019 um 2:35 Uhr

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

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

Um einen einzelnen Wert für ein assoziatives Array voranzustellen, verwenden Sie anstelle von array_unshift() erneut array_merge():

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

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

Benutzeravatar von karim79
karim79

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

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

  • Als Nachtrag, ksort gibt boolean zurück, also muss das Obige als zwei Anweisungen ausgeführt werden, nicht als eine, z $a = $array1 + $array2; ksort($a);Andernfalls $resulting_array wird ein boolescher Wert sein, nicht das Array, das Sie erwartet haben.

    – El Yobo

    17. Oktober 2011 um 22:39 Uhr

Benutzeravatar von Toby Allen
Tobi Allen

Wenn Sie Laravel verwenden, können Sie Prepend für eine Sammlungsinstanz verwenden

 collect(['b' => 'b', 'c' => 'c'])->prepend('a','a');

// ['a'=>'a', 'b' => 'b', 'c' => 'c']

https://laravel.com/docs/9.x/collections#method-prepend

  • Als Nachtrag, ksort gibt boolean zurück, also muss das Obige als zwei Anweisungen ausgeführt werden, nicht als eine, z $a = $array1 + $array2; ksort($a);Andernfalls $resulting_array wird ein boolescher Wert sein, nicht das Array, das Sie erwartet haben.

    – El Yobo

    17. Oktober 2011 um 22:39 Uhr

1434250cookie-checkStellen Sie assoziative Array-Elemente einem assoziativen Array voran

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy