Zusammenführen von zwei mehrdimensionalen arrays auf bestimmten Schlüssel
Sagen wir, ich habe folgende arrays:
Array
(
[0] => Array
(
[id] => 5
[name] => Education
)
[1] => Array
(
[id] => 4
[name] => Computers
)
[3] => Array
(
[id] => 7
[name] => Science
[4] => Array
(
[id] => 1
[name] => Sports
)
)
Und das zweite:
Array
(
[0] => Array
(
[id] => 1
[title] => Sport
)
[1] => Array
(
[id] => 7
[title] => Sci
)
[3] => Array
(
[id] => 4
[title] => Comp
[4] => Array
(
[id] => 5
[title] => Edu
)
)
Und gewünschte Ausgabe:
Array
(
[0] => Array
(
[id] => 5
[name] => Education
[title] => Edu
)
[1] => Array
(
[id] => 4
[name] => Computers
[title] => Comp
)
[3] => Array
(
[id] => 7
[name] => Science
[title] => Sci
[4] => Array
(
[id] => 1
[name] => Sports
[title] => Sport
)
)
Ich habe es geschafft, verschmelzen diese arrays einfach:
foreach($first as $key => $value){
$result[$key] = array_merge($first[$key], $second[$key]);
}
Aber die Ausgabe ist nicht richtig kombiniert:
Array
(
[0] => Array
(
[id] => 5
[name] => Education
[title] => Sport
)
[1] => Array
(
[id] => 4
[name] => Computers
[title] => Sci
)
[3] => Array
(
[id] => 7
[name] => Science
[title] => Comp
[4] => Array
(
[id] => 1
[name] => Sports
[title] => Edu
)
)
Das problem ist, ich möchte zusammenfassen dieser arrays auf die gleiche id
.
Gewünschte Ausgabe zu Sortieren, sollte derselbe sein wie in dem ersten array.
Wie kann ich das erreichen? Jede Hilfe wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach eine verschachtelte Schleife und überprüfen Sie, ob die
id
Werte übereinstimmen, dann fügen Sietitle
zu$first
(odername
zu$second
)Geben Sie den code, funktioniert einwandfrei. Deine Erwartungen sind einfach falsch. Zum Beispiel in einem array 4. element
id
Platz 1, aber in einem anderen array, 4. elementid
ist 5, so dass Ihr "merge diese arrays auf die gleiche id" macht keinen Sinn, weil durch die Zusammenlegung von 4. Elementen, die in ein Sie auch Zusammenführen, Ihre Kinder, und daid
ist, die in beiden arrays, einmal Wert gegangen ZU werden, da es keine zwei gleichen Schlüsseln im array.BEARBEITEN
müssen Sie manuell Zusammenführen, wie PHP-Funktionen zusammenfassen, basierend auf Schlüssel, während Sie Zusammenführen möchten, basierend auf Inhalt:
$first[0]['id']
(entspricht5
) finden gleicheid
in der zweiten Reihe, hier$second[4]['id']
und verschmelzen Sie in new array etwa so:array('id'=>5, 'name'=>'Education', 'title'=>'Edu')
. Ist das nicht möglich?Solange beide arrays haben immer jede id in Ihnen, was zur Sortierung der beiden arrays, das 'id' Feld, dann ließ php den Seriendruck?
Haben nicht getestet, der code, aber es zeigt die Idee.
Nicht die Verwendung von foreach in foreach,das könnte zu langsam sein, wenn das array so groß ist.
Bieten einen alternativen Ansatz zur Verfügung in
PHP 5.5+
.Da die Reihenfolge der beiden arrays ist nicht identisch mit der ersten Verwendung array_column zum indizieren des arrays durch die
id
.Diese können Sie verwenden array_replace_recusrive auf die
id
indizierte arrays.array_replace_recursive
wird, vermischen sich die Werte in den arrays passenden index Vereinigung der beiden array-sets.Optional
array_values
zu neu indizieren das array, das entfernen derid
index Verband.Beispiel https://3v4l.org/ndv2j
Ergebnis
Stellen Sie sicher, dass die Elemente in der gleichen Reihenfolge dann: