PHP中array_multisort函數會對多個陣列或多維數組排序,參數陣列被當成一個表格的列並以行來排序——這類似於 SQL 的 ORDER BY 子句的功能。第一個陣列是要排序的主要陣列。數組中的行(值)比較相同的話就按照下一個輸入數組中對應值的大小來排序,依此類推。注意:作為參數的陣列元素個數應保持一致,否則會報錯。
先看一個對多個陣列進行排序的例子。
$array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10); $array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1'); $array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F'); array_multisort($array1,$array2,$array3); print_r($array1);//Array ( [four] => 10 [one] => 10 [three] => 20 [two] => 20 ) print_r($array2);//Array ( [four] => 1 [one] => 10 [three] => 20 [two] => 30 ) print_r($array3);//Array ( [four] => F [one] => C [three] => B [two] => A )
在上面的範例中,首先對第一個參數陣列進行排序(預設所有陣列升序排序),我們可以看出第一個數組中存在相同的值(鍵名'one'和'four'的鍵值相同,鍵名'two'和'three'的鍵值相同),所以在排序第一個數組的相同值時就依照下一個輸入數組中對應值的大小來排序(第二個數組'four'的值小於'one'的值,因此four的值排在one的前面),依此類推。
在看一個,改變排序順序的例子。
$array1 = array('one'=>'10','two'=>'20','three'=>'20','four'=>10); $array2 = array('one'=>'10','two'=>'30','three'=>'20','four'=>'1'); $array3 = array('one'=>'C','two'=>'A','three'=>'B','four'=>'F'); array_multisort($array1,SORT_DESC,$array2,SORT_ASC,$array3); print_r($array1);//Array ( [three] => 20 [two] => 20 [four] => 10 [one] => 10 ) print_r($array2);//Array ( [three] => 20 [two] => 30 [four] => 1 [one] => 10 ) print_r($array3);//Array ( [three] => B [two] => A [four] => F [one] => C )
在這個例子中,第一個陣列降序排序,碰到相同的值,按照第二個陣列升序值進行排序。
注意:如果要是排序數組都是關聯數組,則保留原有key名,若存在索引數組,則會依序重新建立索引。
$array1 = array('one'=>'10',2=>'20',3=>'20',4=>10); $array2 = array('one'=>'10','2'=>'30','3'=>'20','four'=>'1'); $array3 = array('one'=>'C','2'=>'A','3'=>'B','four'=>'F'); array_multisort($array1,$array2,$array3); print_r($array1); //Array ( [0] => 10 [one] => 10 [1] => 20 [2] => 20 ) print_r($array2); //Array ( [four] => 1 [one] => 10 [0] => 20 [1] => 30 ) print_r($array3); //Array ( [four] => F [one] => C [0] => B [1] => A )
多維數組排序。
我們通常有一些多維數組需要排序:
$guys = array( array('name'=>'jake', 'score'=>80, 'grade' =>'A'), array('name'=>'jina', 'score'=>70, 'grade'=>'A'), array('name'=>'john', 'score'=>70, 'grade' =>'A'), array('name'=>'ben', 'score'=>20, 'grade'=>'B') ); //例如我们想按成绩倒序排列,如果成绩相同就按名字的升序排列。 //这时我们就需要根据$guys的顺序多弄两个数组出来: $scores = array(80,70,70,20); $names = array('jake','jina','john','ben'); //然后 array_multisort($scores, SORT_DESC, $names, $guys); foreach($guys as $v){ print_r($v); echo "<br/>"; } /* Array ( [name] => jake [score] => 80 [grade] => A ) Array ( [name] => jina [score] => 70 [grade] => A ) Array ( [name] => john [score] => 70 [grade] => A ) Array ( [name] => ben [score] => 20 [grade] => B ) */
相關推薦:
php對多個數組或多維數組進行排序的函數array_multisort()
#以上是PHP數組之array_multisort函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!