Aktueller Standort: Startseite> Neueste Artikel> Wie schreibe ich eine benutzerdefinierte Vergleichsfunktion in der Funktion array_udiff richtig?

Wie schreibe ich eine benutzerdefinierte Vergleichsfunktion in der Funktion array_udiff richtig?

gitbox 2025-08-05

1. Überblick über die Funktion array_udiff

Die Funktion array_udiff wird verwendet, um die Unterschiede zwischen mehreren Arrays zu berechnen. Der Unterschied zu Array_DIFF besteht darin, dass Entwickler eine benutzerdefinierte Vergleichsfunktion zum Vergleichen von Elementen bereitstellen können. Die grundlegende Syntax dieser Funktion lautet wie folgt:

 <span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$value_compare_func</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1, $ array2, ... $ arrays : ein oder mehrere Arrays zu vergleichen.

  • $ value_compare_func : Eine Rückruffunktion, die zwei Array -Elemente vergleicht. Diese Funktion gibt einen Ganzzahlwert zurück, um die Reihenfolge der Elemente anzuzeigen.

2. Anforderungen an benutzerdefinierte Vergleichsfunktionen

Die Funktion einer benutzerdefinierten Vergleichsfunktion besteht darin, die Vergleichsregeln zwischen Array -Elementen zu definieren. Es dauert zwei Parameter, normalerweise Elemente aus zwei Arrays, und bestimmt ihre Bestellung anhand des zurückgegebenen Ergebniss. Der Vergleich der Funktionen sollte den folgenden Regeln befolgen:

  • Wenn der erste Parameter kleiner als der zweite Parameter ist, wird ein negativer Wert zurückgegeben.

  • Wenn der erste Parameter gleich dem zweiten Parameter ist, geben Sie Null zurück.

  • Wenn der erste Parameter größer als der zweite Parameter ist, wird ein positiver Wert zurückgegeben.

PHP bestimmt, welche Elemente im Ergebnisarray basierend auf dem Rückgabewert der benutzerdefinierten Vergleichsfunktion aufbewahrt werden.

3. Schreiben Sie benutzerdefinierte Vergleichsfunktionen

Die Implementierung von benutzerdefinierten Vergleichsfunktionen ist relativ einfach. Hier ist ein basisches Beispiel für benutzerdefinierte Vergleichsfunktionen:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_values</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span> === </span><span><span class="hljs-variable">$b</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// gleich</span></span><span>
    }
    </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span> &lt; </span><span><span class="hljs-variable">$b</span></span><span>) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// Weniger als negativ zurückkehren,Größer als die positive Rückgabezahl</span></span><span>
}
</span></span>

Diese Vergleichsfunktion gilt für Zahlen. Wenn Sie Strings oder komplexere Datentypen vergleichen möchten, müssen Sie sie möglicherweise entsprechend den tatsächlichen Anforderungen ändern.

4. Verwenden Sie die benutzerdefinierte Vergleichsfunktion für Array_udiff

In Array_udiff ist die Verwendung benutzerdefinierter Vergleichsfunktionen sehr einfach. Geben Sie es einfach als letzter Parameter ein. Vergleichen Sie beispielsweise die Unterschiede zwischen zwei Arrays:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">"compare_values"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

Wie Sie sehen können, betragen die Differenzelemente der Arrays $ Array1 und $ Array2 1 und 2 und sie sind nicht in $ array2 .

5. Vergleich mehrerer Arrays

Array_udiff kann nicht nur zwei Arrays vergleichen, sondern auch die Unterschiede zwischen mehreren Arrays vergleichen. Sie müssen nur mehr Arrays weitergeben und PHP wird in der angegebenen Reihenfolge eins nach dem anderen vergleichen.

Vergleichen Sie beispielsweise die Unterschiede zwischen drei Arrays:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];
</span><span><span class="hljs-variable">$array3</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-variable">$array3</span></span><span>, </span><span><span class="hljs-string">"compare_values"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

6. Vergleich von Zeichenfolgen oder komplexen Datentypen

Wenn Sie Zeichenfolgen oder komplexe Datenstrukturen vergleichen müssen, sollte auch die Vergleichsfunktion entsprechend angepasst werden. Wenn Sie beispielsweise die Größe von zwei Zeichenfolgen vergleichen, können Sie die STRCMP -Funktion verwenden:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_strings</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>);
}

</span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"cherry"</span></span><span>, </span><span><span class="hljs-string">"date"</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-string">"compare_strings"</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; apple
)
</span></span>

7. Verschluss als Vergleichsfunktion verwenden

In PHP sind auch Verschlüsse (anonyme Funktionen) eine häufige Verwendung und können als Vergleichsfunktionen für Array_udiff verwendet werden. Auf diese Weise müssen Sie keine benannte Funktion separat definieren. Beispielsweise zeigt der folgende Code, wie Abschluss verwendet wird, um die Unterschiede zwischen zwei Integer -Arrays zu vergleichen:

 <span><span><span class="hljs-variable">$array1</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-variable">$array2</span></span><span> = [</span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$a</span></span><span> - </span><span><span class="hljs-variable">$b</span></span><span>; </span><span><span class="hljs-comment">// Einfacher Vergleich der numerischen Größen</span></span><span>
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Das Ausgangsergebnis ist:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

8. Leistungsoptimierung

Die Leistung von Array_udiff kann beim Umgang mit sehr großen Arrays zu einem Problem werden. Da Array_UDIFF eine benutzerdefinierte Vergleichsfunktion für Elemente als Element benötigt, wird die Leistungsoptimierung besonders wichtig. Versuchen Sie beim Schreiben von Vergleichsfunktionen, unnötige Berechnungen und komplexe Logik zu vermeiden und die Vergleichsfunktionen präzis und effizient zu halten.

abschließend

Durch die Verwendung von Array_udiff und benutzerdefinierten Vergleichsfunktion können wir die Unterschiede zwischen mehreren Arrays flexibel berechnen. Der Schlüssel besteht darin, korrekt zu verstehen, wie die Vergleichsfunktion funktioniert und die Vergleichsregeln anhand verschiedener Datentypen anpassen. Unabhängig davon, ob es sich um Zahlen, Zeichenfolgen oder komplexe Datenstrukturen handelt, können benutzerdefinierte Vergleichsfunktionen Entwicklern eine höhere Kontrolle bieten. Hoffentlich können Sie durch die Erläuterung dieses Artikels besser verstehen, wie Sie die Funktion array_udiff in PHP verwenden, um Array -Unterschiede zu behandeln.