在 PHP 程式設計中,我們經常需要對多維數組進行排序,來滿足不同的需求,例如依照價格高低排序、依照字母順序排序等。然而,與一維數組相比,對多維數組進行排序會更加複雜。本文將介紹如何使用 PHP 實作多維數組的排序。
首先,我們需要了解PHP 中的排序函數:sort()、rsort()、asort()、arsort()、ksort ()、krsort()、uksort()、usort()。這些函數都適用於一維數組的排序,如果要排序的是多維數組,我們需要使用回呼函數(callback function)來對數組進行排序。
回呼函數是指在其他函數中作為參數傳遞的函數。在 PHP 中,回呼函數通常用於對陣列進行排序、過濾、遍歷等操作。我們可以使用匿名函數或具有自訂名稱的函數作為回調函數。
下面是一個使用匿名函數作為回呼函數的例子:
$array = array( array('price' => 45.50), array('price' => 15.00), array('price' => 20.15), array('price' => 25.00), array('price' => 90.10), array('price' => 9.99), ); usort($array, function($a, $b) { if ($a['price'] == $b['price']) return 0; return ($a['price'] < $b['price']) ? -1 : 1; }); print_r($array);
輸出結果如下:
Array ( [0] => Array ( [price] => 9.99 ) [1] => Array ( [price] => 15 ) [2] => Array ( [price] => 20.15 ) [3] => Array ( [price] => 25 ) [4] => Array ( [price] => 45.5 ) [5] => Array ( [price] => 90.1 ) )
##如果要對多維數組進行排序,我們需要使用回呼函數定義數組的排序規則。我們可以在回呼函數中定義多個排序條件,並依照優先權逐一比較陣列元素的值,以達到排序的目的。
$array = array( array('name' => 'John', 'age' => 25, 'score' => 80), array('name' => 'Mary', 'age' => 28, 'score' => 90), array('name' => 'Bob', 'age' => 20, 'score' => 95), array('name' => 'Jack', 'age' => 30, 'score' => 85), array('name' => 'Lisa', 'age' => 22, 'score' => 85), ); // 按照年龄降序、分数升序、名字升序排序 usort($array, function($a, $b) { if ($a['age'] == $b['age']) { if ($a['score'] == $b['score']) { return strcmp($a['name'], $b['name']); } else { return ($a['score'] > $b['score']) ? 1 : -1; } } else { return ($a['age'] < $b['age']) ? 1 : -1; } }); print_r($array);
Array ( [0] => Array ( [name] => Mary [age] => 28 [score] => 90 ) [1] => Array ( [name] => Jack [age] => 30 [score] => 85 ) [2] => Array ( [name] => Lisa [age] => 22 [score] => 85 ) [3] => Array ( [name] => John [age] => 25 [score] => 80 ) [4] => Array ( [name] => Bob [age] => 20 [score] => 95 ) )
以上是使用PHP實作多維數組的排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!