Dadurch wird die vorhandene Struktur der Arrays verwendet und beibehalten, was Sie meiner Meinung nach wünschen.
Ich weiß, dass dies ein etwas altes Thema ist, aber für andere, die IDs verwenden, die keine Ganzzahlen, sondern Zeichenfolgen sind, möchten Sie vielleicht return strcmp($a[‘ITEM],$b[‘ITEM’]) in der udiffCompare-Funktion
– despina
28. März 2014 um 14:14 Uhr
In PHP7 und höher können Sie die Raumschiffbetreiber: return $a['ITEM'] <=> $b['ITEM'];
– Bischof
8. Juni 2015 um 17:38 Uhr
Eine Sache, die ich gerne gewusst hätte, bevor ich versucht habe, diese Funktion zu verwenden, ist, dass die array_udiff Funktionsargumente $arr2 und $arr1 korrelieren NICHT mit den Funktionsargumenten $a und $b von udiffCompare. Ich kratzte mich immer wieder am Kopf und fragte mich, warum Elemente von $arr2 innerhalb des Rückrufs mit sich selbst verglichen wurden. Ich habe das mit diesem Kommentar in der PHP-Dokumentation herausgefunden: php.net/manual/en/function.array-udiff.php#80149
– Keven
15. März 2018 um 21:44 Uhr
Jason Fingar
Ich würde wahrscheinlich die ursprünglichen Arrays durchlaufen und sie eindimensional machen … so etwas wie
foreach($array1 as $aV){
$aTmp1[] = $aV['ITEM'];
}
foreach($array2 as $aV){
$aTmp2[] = $aV['ITEM'];
}
$new_array = array_diff($aTmp1,$aTmp2);
Ein weiterer lustiger Ansatz mit a json_encode Trick (kann nützlich sein, wenn Sie einige komplexe Werte im Array der ersten Ebene “roh” vergleichen müssen):
// Compare all values by a json_encode
$diff = array_diff(array_map('json_encode', $array1), array_map('json_encode', $array2));
// Json decode the result
$diff = array_map('json_decode', $diff);
Danke, nur das funktioniert. symmetrische Ausführung public static function myArrayDiff($array1, $array2) { return array_map('json_decode', array_merge( array_diff(array_map('json_encode', $array1), array_map('json_encode', $array2)), array_diff(array_map('json_encode', $array2), array_map('json_encode', $array1)) )); }
– Dimmduh
7. März 2017 um 11:00 Uhr
Markus Amery
Ein paar Lösungen mit array_filter die weniger leistungsfähig sind als die array_udiff Lösung für große Arrays, die aber etwas einfacher und flexibler sind:
$array1 = [
['ITEM' => 1],
['ITEM' => 2],
['ITEM' => 3],
];
$array2 = [
['ITEM' => 2],
['ITEM' => 3],
['ITEM' => 1],
['ITEM' => 4],
];
$arrayDiff = array_filter($array2, function ($element) use ($array1) {
return !in_array($element, $array1);
});
// OR
$arrayDiff = array_filter($array2, function ($array2Element) use ($array1) {
foreach ($array1 as $array1Element) {
if ($array1Element['ITEM'] == $array2Element['ITEM']) {
return false;
}
}
return true;
});
Wie immer mit array_filterbeachten Sie, dass array_filter behält die Schlüssel des ursprünglichen Arrays bei, also wenn Sie wollen $arrayDiff null-indiziert sein, tun $arrayDiff = array_values($arrayDiff); nach dem array_filter Anruf.
Sie können den folgenden Code verwenden, um den Unterschied zu erhalten