如何查看PHP中usort()的步骤?
How to view the steps of the usort() in PHP?
这是 php.net usort() 页面中的示例 #1:
<?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 函数将数组中的值作为对($a-$b;所以这是 - 3-2、2-5、5-6、6-1)并根据需要移动 $b 值关于 cmp() 函数是否 returns -1、0 或 1。如果它是 -1,则 $b 向下移动(在当前对内),如果它是 0,则它保持在同一个位置,如果它是 1 它会向上移动。根据 php.net 手册 usort() 页面的顶部评论,这就是假设的工作方式。
有什么方法可以一步一步地了解这是如何工作的(排序过程)?我能看到它还是只能在排序完成后才能看到最终结果?我想完全了解这个过程是如何运作的。
在比较函数中使用一些调试输出,您只能看到 PHP 所做的比较,但看不到数组的中间状态。
但是 usort 中使用的算法是众所周知的 - 它是 QuickSort ( Which sort algorithms does PHP's usort apply? )。
您可以在 http://www.algomation.com/algorithm/quick-sort-visualization(或只是 google "quicksort algorithm visualization")
查看其可视化
这是 php.net usort() 页面中的示例 #1:
<?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 函数将数组中的值作为对($a-$b;所以这是 - 3-2、2-5、5-6、6-1)并根据需要移动 $b 值关于 cmp() 函数是否 returns -1、0 或 1。如果它是 -1,则 $b 向下移动(在当前对内),如果它是 0,则它保持在同一个位置,如果它是 1 它会向上移动。根据 php.net 手册 usort() 页面的顶部评论,这就是假设的工作方式。
有什么方法可以一步一步地了解这是如何工作的(排序过程)?我能看到它还是只能在排序完成后才能看到最终结果?我想完全了解这个过程是如何运作的。
在比较函数中使用一些调试输出,您只能看到 PHP 所做的比较,但看不到数组的中间状态。
但是 usort 中使用的算法是众所周知的 - 它是 QuickSort ( Which sort algorithms does PHP's usort apply? )。
您可以在 http://www.algomation.com/algorithm/quick-sort-visualization(或只是 google "quicksort algorithm visualization")
查看其可视化