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 ) */