Dies ist das Beispiel # 1 von der php.net usort() Seite:Wie sieht man die Schritte von usort() in PHP?
<?php
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
usort Die Funktion, die Werte innerhalb der Anordnung als Paare ($ a- $ b nimmt, so ist dies - 3-2 , 2-5, 5-6, 6-1) und verschiebt den $ b-Wert in Abhängigkeit davon, ob die cmp() - Funktion -1, 0 oder 1 zurückgibt. Wenn es -1 ist, wird $ b nach unten verschoben (innerhalb eines aktuellen Wertes) Paar), wenn es 0 ist, bleibt es an der gleichen Stelle und wenn es 1 ist, wird es nach oben bewegt. So soll das funktionieren, basierend auf dem Top-Kommentar von der php.net Manual usort() Seite.
Gibt es eine Möglichkeit zu sehen, wie dies Schritt für Schritt funktioniert (der Sortierprozess)? Kann ich es sehen oder ist es nur möglich, das Endergebnis nach dem Sortieren zu sehen? Ich möchte vollständig verstehen, wie dieser Prozess funktioniert.
Kann ich schreiben, ein Stück von PHP-Code sehen, die mir ermöglichen würde, die Schritte dieser besonderen usort() Sortierung zu sehen? –
PHP implementiert einen Sortieralgorithmus und verwendet, wenn es zwei Elemente vergleichen muss, den Rückruf, den Sie als zweites Argument für 'usort()' bereitstellen. Es gibt Dutzende Sortieralgorithmen. PHP verwendet wahrscheinlich Quicksort (es ist einer der schnellsten Sortieralgorithmen); Sie können dies herausfinden, indem Sie die PHP-Quellen überprüfen. Sie können die Vergleichsfunktion auch Informationen über ihre Argumente anzeigen lassen. Wenn Sie Algorithmen gut sortieren können, können Sie sie basierend auf diesen Informationen identifizieren. Wenn Sie nicht, na ja, ich schätze, es hilft Ihnen nicht zu viel (und Sie müssen einige Sortieralgorithmen lernen). – axiac
Ja, ich denke, dass dies der Usort ist, der auf dem Top-Kommentar dieser Handbuchseite basiert. Ich frage mich, ob ich die Schritte dazu sehen kann. Oder wahrscheinlich nicht? Es gibt nur das Ergebnis, wenn es fertig ist/am Ende? Ich denke, wenn das Quicksort ist, müsste ich schauen, wie das funktioniert. EDIT: Also wahrscheinlich keine Möglichkeit, es von der PHP-Ebene zu sehen und nur in den Quicksort zu schauen? –