2016-05-21 15 views
0

Ich habe versucht, "array_merge ($ a, $ b)" zu verwenden, aber das funktioniert nicht für das, was ich mache. Hier sind zwei Arrays:Wie zwei mehrdimensionale Arrays zusammenführen und Duplikate aktualisieren?

$a = 
Array 
(
    [Mike] => Array 
     (
      [100] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [200] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [300] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [400] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

     ) 

) 


$b = 
Array 
(
    [Mike] => Array 
     (
      [500] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [600] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

     ) 

) 

Das Konzept ist ein Benutzer „Mike“, fügt Elemente in ihre Liste (100.200.300.400). Diese Liste wird in der Datenbank gespeichert. Mike meldet sich ab und startet einige Tage später eine neue Liste als anonymer Gast, der Gegenstände (500.600) hinzufügt, die er in seiner Sitzung gespeichert hat. Wenn er fertig ist und sich wieder anmeldet, möchte ich die beiden Listen kombinieren und die aktualisierte Liste speichern. Wenn ich "array_merge" benutze und der Array-Schlüssel [Mike] ist, ersetzt er $ a durch $ b und ersetzt die Elementnummern zusammen.

Wie kann ich das kombinieren? Auch wenn zwei Elemente in beiden Listen gleich sind, wie (100,200,300,400) in einer Liste und (100,500) in der zweiten Liste (Elementnummer "100" ist hier das Duplikat). Ich möchte, dass die Felder [quantity] und [attribute] der "100" in der zweiten Liste die Felder für den Eintrag "100" in der ersten Liste überschreiben.

Dank Mit freundlichen Grüßen

Antwort

0

Sie den Code unten verwenden können. Stellen Sie sicher, dass Sie Ihr aktuelles Ergebnis zuerst angeben. Es wird Ihnen das gewünschte Ergebnis geben.

$c = $b['Mike']+$a['Mike']; 

dank

+0

Vielen Dank, es war tatsächlich: $ c ['Mike'] = $ b ['Mike'] + $ ein ['Mike'], um die Array-Struktur gleich zu halten. (Bitte ignorieren Sie meinen vorherigen Kommentar zu einer sekundären Frage, ich konnte es mit foreach Schleifen auf beiden Arrays lösen.) – peppy

1

Verwenden array_replace_recursive Funktion ( "Dubletten zu aktualisieren"):

$result = array_replace_recursive($a, $b); 

print_r($result); 

Der Ausgang:

Array 
(
    [Mike] => Array 
     (
      [100] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [200] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [300] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [400] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [500] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 

      [600] => Array 
       (
        [quantity] => 1 
        [attribute] => 1 
       ) 
     ) 
) 

http://php.net/manual/en/function.array-replace-recursive.php

+0

Leider verursacht dies ein Problem, es kombiniert die beiden Arrays, aber die Positionsnummern werden für das zweite Array zurückgesetzt . (500,600) wird nach der Zusammenführung auf (4,5) zurückgesetzt. – peppy

+0

das ist nicht wahr. Ich habe die Ausgabe getestet und hinzugefügt. Oder, vielleicht haben Sie verschiedene Schlüsseltypen unter diesen beiden Arrays. Stellen Sie sicher, dass beide Arrays mit Zahlen indiziert sind – RomanPerekhrest

Verwandte Themen