我想了解如何PHP功能usort的作品。 我有這樣的代碼:如何理解usort邏輯?
<?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>';
?>
它將輸出這樣的結果:
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
)
)
據我明白第二PARAM應該是比較函數,它只能返回3個值(-1,0, 1)和usort
使用此結果對數組進行排序?另外我讀到,usort
使用Quicksort實現對數組進行排序。這就是爲什麼明星是第一個和月亮 - 秒? Quicksort將數組分成兩部分,然後對其進行排序?我可以實現2,3維數組的這個函數嗎?
很好的回答。但你能解釋一下嗎?在你寫的回答文章中,最好在排序前使用'shuffle'。這個'shuffle'對pivot元素沒有影響嗎?算法的特點是它更好地處理混洗陣列? –
是的,在排序之前對數組進行混洗可能會避免最糟糕的情況,比如數組已經排序,但算法仍然選擇中間元素作爲主元素。但是這個中間元素在洗牌之後可能是一個不同的元素,而不是洗牌前的元素。 –