Php 如何理解usort逻辑?
我试图理解php函数是如何工作的。 我有这样的代码:Php 如何理解usort逻辑?,php,sorting,usort,Php,Sorting,Usort,我试图理解php函数是如何工作的。 我有这样的代码: <?php $users[] = array('login' => 'moon', 'name' => 'Chris'); $users[] = array('login' => 'star', 'name' => 'Piter'); $users[] = array('login' => 'mars', 'name' => 'Tim'); $users[] = array('login' =>
<?php
$users[] = array('login' => 'moon', 'name' => 'Chris');
$users[] = array('login' => 'star', 'name' => 'Piter');
$users[] = array('login' => 'mars', 'name' => 'Tim');
$users[] = array('login' => 'earth', 'name' => 'Garry');
function compare($a, $b) {
echo $a['login'] . '--' . $b['login'] . '<br />';
echo strcmp($a['login'], $b['login']) . '<br />';
return strcmp($a['login'], $b['login']);
}
usort($users, "compare");
echo '<pre>'; print_r($users); echo '</pre>';
?>
据我所知,第二个参数应该是比较函数,它只能返回3个值(-1,0,1)和
usort
使用此结果对数组进行排序?我还读到,usort
使用快速排序实现对数组进行排序。这就是为什么星星是第一位,而月亮是第二位?快速排序将数组分成两部分,然后对其进行排序?我可以为2,3维数组实现此功能吗?当它比较数组中的任意两个项目时,您正在告诉usort将首先放置哪个项目。您的函数返回元素的login
值的strcmp
比较,因此它根据登录名按字母顺序排列所有元素。是的,usort使用比较函数,比较值并使用算法对数组排序。发件人:
如果第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数
可以在以下位置找到在PHP中实现usort的链接:。根据该算法,使用中间元素作为轴心元素,实现如下:
这就是算法使用“星”作为第一个枢轴元素的原因
对于多维数组,如果要维护索引关联,请使用。包含排序多维数组的示例。以及如何决定在下一次迭代中应比较哪些元素?而且,它还应该相互比较每个元素?阅读注释-特别是第一个。它不会将每个元素与其他元素进行比较——排序算法不需要这样做。答案很好。你能解释一下吗。在文章中,你的答案写道,最好在排序前使用
洗牌。这个洗牌
对枢轴元素没有影响?它的算法功能是更好地处理无序排列的数组?是的,排序前对数组进行无序排列可以避免最坏的情况,例如当数组已经排序时,但算法仍然选择中间元素作为轴心元素。但是这个中间元素在洗牌数组之后可能与洗牌之前是不同的元素。
star--moon
1
star--mars
1
earth--star
-1
moon--earth
1
mars--moon
-1
earth--mars
-1
Array
(
[0] => Array
(
[login] => earth
[name] => Garry
)
[1] => Array
(
[login] => mars
[name] => Tim
)
[2] => Array
(
[login] => moon
[name] => Chris
)
[3] => Array
(
[login] => star
[name] => Piter
)
)
offset = (end - begin) >> 1;