In der täglichen Entwicklung ist Array_Diff () eine sehr praktische PHP-integrierte Funktion. Es kann verwendet werden, um zwei oder mehr Arrays zu vergleichen, die Werte im ersten Array zurückgeben, jedoch nicht im nachfolgenden Array. Dies ist in Szenarien wie Filterdaten, dem Vergleich von Listenunterschieden usw. sehr verbreitet.
Die Frage lautet also: Wird Array_Diff () beim Vergleich von Werten strenge Typ -Übereinstimmungen durchführen? Mit anderen Worten, Elemente mit unterschiedlichen Typen, aber der gleiche Wert werden als gleich oder unterschiedlich angesehen?
In PHP verwendet Array_Diff () "Nicht-Streng" -Ge-Vergleich, dh ihre Datentypen vergleichen nicht, ob zwei Werte gleich sind, sondern konzentriert sich nur darauf, ob die Werte "gleich" sind.
Diese Vergleichsmethode wird in PHP als "loser Vergleich" bezeichnet und verhält sich ähnlich wie mit dem Operator == Operator, anstatt === .
<?php
$array1 = [1, 2, 3, "4"];
$array2 = ["1", 2, 4];
$result = array_diff($array1, $array2);
print_r($result);
?>
Array
(
[2] => 3
[3] => 4
)
In diesem Beispiel:
1 (Ganzzahl) und "1" (Zeichenfolge) gelten als gleich und werden daher herausgefiltert.
3 und "3" sind nicht in $ array2 , also reserviert.
"4" und 4 gelten als gleich und werden ebenfalls herausgefiltert.
Schlussfolgerung: Array_Diff () von PHP führt keinen strengen Typvergleich durch.
Obwohl Array_Diff () selbst keinen strengen Vergleich unterstützt, bietet PHP ein weiterer Funktion arrray_diff_assoc () , der zusätzlich zum Vergleichen von Werten vergleicht.
Wenn wir uns jedoch nur um einen strengen Vergleich der Werte kümmern, können wir Array_udiff () verwenden, um einen strengen Vergleich mit einer benutzerdefinierten Vergleichsfunktion zu erreichen.
<?php
$array1 = [1, 2, 3, "4"];
$array2 = ["1", 2, 4];
$result = array_udiff($array1, $array2, function ($a, $b) {
if ($a === $b) return 0;
return ($a > $b) ? 1 : -1;
});
print_r($result);
?>
Array
(
[0] => 1
[2] => 3
[3] => 4
)
In diesem Beispiel werden 1 (int) und "1" (Zeichenfolge) als unterschiedliche Werte behandelt, so dass 1 erhalten bleibt. Dies erreicht den Zweck des strengen Typvergleichs.
Angenommen, Sie haben eine Liste von Produkt -IDs, die vom Benutzer (alle Zeichenfolgen) hochgeladen wurden, und möchten die in der Datenbank bereits vorhandenen IDs (Integrale) entfernen. Sie können eine falsche Übereinstimmung in strenger Matching vermeiden:
<?php
$uploadedIDs = ["101", "102", "103"];
$existingIDs = [101, 104];
$diff = array_udiff($uploadedIDs, $existingIDs, function ($a, $b) {
return $a === $b ? 0 : ($a > $b ? 1 : -1);
});
// Angenommen, Sie müssen einen konstruieren URL Zeigen Sie den Rest ID
$url = "https://m66.net/products?ids=" . implode(",", $diff);
echo $url;
?>
URL Ausgabe:
https://m66.net/products?ids=101,102,103
array_diff () verwendet lose Vergleiche, unabhängig von Typunterschieden;
Wenn Sie strikt mit dem Werttyp übereinstimmen müssen, können Sie Array_udiff () mit einer benutzerdefinierten Vergleichsfunktion verwenden.
Beim Umgang mit Benutzerdaten und typempfindlichen Datenfilterung wird empfohlen, strenge Vergleiche zu verwenden, um logische Schwachstellen zu vermeiden.
Ich hoffe, dieser Artikel wird für Sie hilfreich sein, um den Verhaltensmechanismus von Array -Differenzfunktionen in PHP zu verstehen!