Aktueller Standort: Startseite> Neueste Artikel> Wie verwende ich anonyme Funktionen als benutzerdefinierten Komparator in der Usort -Funktion von PHP?

Wie verwende ich anonyme Funktionen als benutzerdefinierten Komparator in der Usort -Funktion von PHP?

gitbox 2025-08-28

Wie verwende ich anonyme Funktionen als benutzerdefinierten Komparator in der Usort -Funktion von PHP?

In PHP ist usort () eine sehr nützliche Funktion, mit der wir die Sortierung von Arrays anpassen können. Der zweite Parameter der Usort () -Funktion ist eine Rückruffunktion (normalerweise eine Vergleichsfunktion), die bestimmt, wie die Elemente im Array sortiert werden. Um die Sortierregeln flexibler zu steuern, verwenden wir normalerweise anonyme Funktionen als Rückruffunktionen.

1. Einführung in die Usort () -Funktion

Die usort () -Funktion wird zum Sortieren von Arrays verwendet und ermöglicht es Benutzern, Sortierregeln anzupassen. Die grundlegende Syntax ist wie folgt:

 <span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span>);
</span></span>
  • $ Array ist das zu sortierende Array.

  • $ callback ist eine Rückruffunktion, die zwei Array -Elemente als Parameter erfordert und einen Wert zurückgibt, um deren Bestellung zu bestimmen. Die Rückruffunktion sollte den folgenden Regeln befolgen:

    • Wenn das erste Element kleiner als das zweite Element ist, wird eine negative Zahl zurückgegeben.

    • Wenn das erste Element größer als das zweite Element ist, wird eine positive Zahl zurückgegeben.

    • Wenn die beiden Elemente gleich sind, geben Sie 0 zurück.

2. Anonyme Funktionen als benutzerdefinierten Komparator

In vielen Fällen möchten wir keine einzige Funktion für jede Sortieroperation definieren. PHP ermöglicht es uns, diesen Prozess mithilfe anonymer Funktionen zu vereinfachen (auch als Schließungen bezeichnet). Anonyme Funktionen können direkt als Rückruffunktionen für ustort () verwendet werden, ohne dass eine benannte Funktion separat deklariert werden muss.

Beispiel: Sortieren nach Anzahl von klein bis groß mit anonymen Funktionen

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">9</span></span><span>, </span><span><span class="hljs-number">1</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-comment">// Sortieren mit anonymen Funktionen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</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">// Aufsteigende Ordnung</span></span><span>
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ausgabe:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; </span><span><span class="hljs-number">6</span></span><span>
    [</span><span><span class="hljs-meta">5</span></span><span>] =&gt; </span><span><span class="hljs-number">9</span></span><span>
)
</span></span>

In diesem Beispiel sind die Parameter $ A und $ B der anonymen Funktion zwei Elemente im Array, und $ a - $ b bedeutet, dass wir in aufsteigender Reihenfolge sortieren möchten. Wenn Sie in absteigender Reihenfolge sortieren möchten, ändern Sie einfach die Rückgabe $ a - $ b; $ b - $ a zurückgeben; .

Beispiel: Sortieren nach Stringlänge

Angenommen, wir haben eine Reihe von Saiten und möchten nach der Länge der Zeichenfolge sortieren:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$array</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-string">"date"</span></span><span>];

</span><span><span class="hljs-comment">// Sortieren Sie nach Stringlänge</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</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-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>);  </span><span><span class="hljs-comment">// 根据长度Aufsteigende Ordnung</span></span><span>
});

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ausgabe:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; date
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; banana
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; cherry
)
</span></span>

In diesem Beispiel wird Strlen ($ A) - Strlen ($ B) verwendet, um die Länge der Zeichenfolge zu sortieren.

Beispiel: Objekte sortieren nach benutzerdefinierten Regeln

Angenommen, wir haben eine Reihe mehrerer Objekte und möchten nach einem Attribut des Objekts sortieren:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">Person</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$age</span></span><span>;

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">__construct</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$name</span></span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>) {
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;name = </span><span><span class="hljs-variable">$name</span></span><span>;
        </span><span><span class="hljs-variable language_">$this</span></span><span>-&gt;age = </span><span><span class="hljs-variable">$age</span></span><span>;
    }
}

</span><span><span class="hljs-variable">$people</span></span><span> = [
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>),
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-number">25</span></span><span>),
    </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">Person</span></span><span>(</span><span><span class="hljs-string">"Charlie"</span></span><span>, </span><span><span class="hljs-number">35</span></span><span>),
];

</span><span><span class="hljs-comment">// 按年龄Aufsteigende Ordnung</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$people</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>-&gt;age - </span><span><span class="hljs-variable">$b</span></span><span>-&gt;age;
});

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$people</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$person</span></span><span>-&gt;name . </span><span><span class="hljs-string">" ("</span></span><span> . </span><span><span class="hljs-variable">$person</span></span><span>-&gt;age . </span><span><span class="hljs-string">")\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Ausgabe:

 <span><span>Bob (</span><span><span class="hljs-number">25</span></span><span>)
Alice (</span><span><span class="hljs-number">30</span></span><span>)
Charlie (</span><span><span class="hljs-number">35</span></span><span>)
</span></span>

Dieses Beispiel zeigt, wie anonyme Funktionen verwendet werden, um nach den Eigenschaften eines Objekts zu sortieren.

3. Zusammenfassung

In PHP ist die Usort () -Funktion ein sehr flexibles Werkzeug. Durch die Verwendung anonymer Funktionen können wir eine komplexe benutzerdefinierte Sortierlogik schnell implementieren. Der Vorteil anonymer Funktionen als Rückruffunktionen besteht darin, dass sie keine zusätzlichen benannten Funktionen benötigen und die Sortierregeln bei der Aufruf von Usort () direkt definieren können, wodurch der Code prägnanter und einfach zu verwalten ist.

Durch rational anonyme Funktionen können Entwickler verschiedene Sortieranforderungen von einfach bis komplex erfüllen, wodurch das PHP -Array -Sortieren effizienter und flexibler wird.