Führen Sie zwei assoziative Arrays mit numerischen Schlüsseln zusammen und behalten Sie die ursprünglichen Schlüssel bei

Lesezeit: 4 Minuten

Awans Benutzeravatar
Awan

Ich habe zwei Arrays wie folgt:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

Ich möchte diese beiden Arrays so kombinieren, dass sie keine Duplikate enthalten und ihre ursprünglichen Schlüssel behalten. Ausgabe sollte beispielsweise sein:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

Ich habe dies versucht, aber es ändert ihre ursprünglichen Schlüssel:

$output = array_unique( array_merge( $array1 , $array2 ) );

Irgendeine Lösung?

Benutzeravatar von KingCrunch
KingCrunch

Benutz einfach:

$output = array_merge($array1, $array2);

Das sollte es lösen. Da Sie Zeichenfolgenschlüssel verwenden, wenn ein Schlüssel mehr als einmal vorkommt (z '44' in Ihrem Beispiel) überschreibt ein Schlüssel vorhergehende mit demselben Namen. Da in Ihrem Fall beide den gleichen Wert haben, spielt es keine Rolle, und es werden auch Duplikate entfernt.

Update: Mir ist gerade aufgefallen, dass PHP die numerischen String-Keys als Zahlen (Ganzzahlen) behandelt und sich so verhält, was bedeutet, dass es auch die Keys neu nummeriert …

Eine Problemumgehung besteht darin, die Schlüssel neu zu erstellen.

$output = array_combine($output, $output);

Update 2: Ich vergesse immer, dass es auch einen Operator gibt (fett gedruckt, weil das so ist Wirklich Wonach suchen Sie! :D)

$output = $array1 + $array2;

All dies ist zu sehen in:
http://php.net/manual/en/function.array-merge.php

  • @KingCrunch – Auch wenn die Zahlen zitiert werden, sind das so nicht String-Schlüssel und so wird der Index nicht bewahrt werden. Beispiel: ideone.com/I2NFT

    – Brendan Bullen

    30. Juni 2011 um 13:29 Uhr


  • Wirklich… Zuerst wollte ich von “einem Bug” sprechen, aber dann ist mir aufgefallen, dass im Handbuch nur von “Zahlentasten” und nicht von “Integer-Tasten” die Rede ist. Fühlt sich etwas verwirrend an.

    – KingCrunch

    30. Juni 2011 um 13:32 Uhr

  • So $array1 + $array2 findet eine kurze und effiziente Lösung statt array_merge() - array_combine() Kombination

    – Awan

    30. Juni 2011 um 13:54 Uhr


  • Offensichtlich ist es das. Ich habe nie das Verhalten von erkannt array_merge() mit numerischen String-Keys vorher und zuerst habe ich gerechnet + Und array_merge() verhalten sich fast identisch, aber es scheint, ich habe etwas gelernt 🙂

    – KingCrunch

    30. Juni 2011 um 14:01 Uhr

  • WARNUNG! für nicht zugeordnete Arrays oder wenn Arrays gemeinsame Schlüssel haben $a + $b != array_merge($a, $b)

    – jmarceli

    8. Mai 2018 um 15:21 Uhr

Das sollten Sie berücksichtigen $array1 + $array2 != $array2 + $array1

$array1 = array(
'11' => 'x1',
'22' => 'x1' 
);  

$array2 = array(
'22' => 'x2',
'33' => 'x2' 
);

mit $array1 + $array2

$array1 + $array2 = array(
'11' => 'x1',
'22' => 'x1',
'33' => 'x2'
);

und mit $array2 + $array1

$array2 + $array1 = array(  
'11' => 'x1',  
'22' => 'x2',  
'33' => 'x2'  
);

Benutzeravatar von Michas
Michas

Das funktioniert:

$output = $array1 + $array2;

  • Ich würde dies nicht empfehlen, da das Verhalten sehr unintuitiv ist, z [1,2,3] + [4,5,6] == [1,2,3]

    – jchook

    14. Oktober 2016 um 23:56 Uhr

  • @jchook Was empfehlen Sie dann?

    – Michas

    15. Oktober 2016 um 0:03 Uhr

  • Das ist, was ich brauchte, danke. Hier ist der Grund: http_build_query(array_merge($array1, $array2)) hat bei mir nicht funktioniert, während http_build_query($array1 + $array2) tat.

    – Barri

    6. Februar 2017 um 16:20 Uhr

Die neue Art, es zu tun php7.4 ist Spread-Operator […]

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);

Der Spread-Operator sollte eine bessere Leistung haben als array_merge

Ein wesentlicher Vorteil des Spread-Operators besteht darin, dass er alle passierbaren Objekte unterstützt, während die Funktion array_merge nur Arrays unterstützt.

Benutzeravatar von Brendan Bullen
Brendan Bullen

Dazu können Sie eine Schleife durchlaufen und an die andere anhängen:

<?php

$test1 = array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

$test2 = array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);


function combineWithKeys($array1, $array2)
{
    foreach($array1 as $key=>$value) $array2[$key] = $value;
    asort($array2);
    return $array2;
} 

print_r(combineWithKeys($test1, $test2));

?>

AKTUALISIEREN: KingCrunch hat die beste Lösung gefunden: print_r($array1+$array2);

Benutzeravatar von elitalon
Elitalon

Das funktioniert:

$a = array(1 => 1, 2 => 2, 3 => 3);
$b = array(4 => 4, 5 => 5, 6 => 6);
$c = $a + $b;
print_r($c);

Benutzeravatar der Community
Gemeinschaft

Warnung! $Array1 + $Array2 überschreibt Schlüssel, also ist meine Lösung (für mehrdimensionale Arrays) zu verwenden array_unique()

array_unique(array_merge($a, $b), SORT_REGULAR);

Notiz:

5.2.10+ Der Standardwert von wurde geändert sort_flags zurück zu SORT_STRING.

5.2.9 Standard ist SORT_REGULAR.

5.2.8- Standard ist SORT_STRING

Es funktioniert einwandfrei. Hoffe es hilft gleich.

  • array_merge() speichert die Schlüssel jedoch nicht. Das dadurch erstellte Array ist 0 indiziert.

    – Durchbohren

    21. November 2017 um 12:20 Uhr

  • @HPierce Nun, im Fall der Addition mehrdimensionaler Arrays gehen einige Informationen verloren +. Schauen Sie sich an: PHPFiddle $b[0] wird verloren sein…

    – Norman Edance

    22. November 2017 um 6:00 Uhr


1449420cookie-checkFühren Sie zwei assoziative Arrays mit numerischen Schlüsseln zusammen und behalten Sie die ursprünglichen Schlüssel bei

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

Privacy policy