這篇文章介紹的內容是關於PHP數組排序函數array_multisort()函數詳解,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
array_multisort()這個函數可以對多個PHP數組進行排序,排序結果是所有的數組都按第一個數組的順序進行排列——有點拗口,真的,並且我要只是這樣說你一定也不明白。先舉個例子:
例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元 素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边 的程序运行结果: $a =array(100,80,50,10,0); $b = array("c","f","q","e","z"); array_multisort($a,$b); var_dump($a); var_dump($b); 运行结果: array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) } array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) “f” [4]=> string(1) “c” } 其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它 数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第 二位……——其实这个多维数组排序算法的最基本体现!
不過需要注意的是:兩個陣列的元素數量必須相同,不然就會出現一個警告訊息
首先我們來看看對多維數組的每一元素[數組]進行排序的操作方法,很簡單,但是有幾個參數需要說明一下,如果您對sql有所了解一看估計就明白了:
//让我们来构造一个多维数组 $a=array(100,2,4,7,7); $b=array('ab','ac','ad','ag','ap'); $ab = array($a,$b); //开始排序 array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC); print_r($ab); 说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC声 明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序) 最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同 的数值则按照$ab[1]的顺序排列,输出结果如下: Array ( [0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 ) [1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac ) )
現在我們再看一個更貼近實際應用的例子:
$array[] = array("age"=>20,"name"=>"li"); $array[] = array("age"=>21,"name"=>"ai"); $array[] = array("age"=>20,"name"=>"ci"); $array[] = array("age"=>22,"name"=>"di"); foreach ($array as $key=>$value){ $age[$key] = $value['age']; $name[$key] = $value['name']; } array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array); print_r($array);
這個例子的$array[]數組,是按照資料庫中讀出的記錄來建構的,我們現在對他們依照年齡由大到小的順序排列,如果年齡相同就依照名字的順序排序。這樣的排序才是我們將來會經常用的到的
因為array_multisort()需要的排序參數必須是一個列,所以我們用foreach把這個數組的年齡和姓名讀出來,之後呢?
就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要 声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有 关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需 要列,还没见过用行数据进行排序的呢!
輸出結果如下-正如我們所想的:
Array ( [0] => Array ( [age] => 22 [name] => di ) [1] => Array ( [age] => 21 [name] => ai ) [2] => Array ( [age] => 20 [name] => ci ) [3] => Array ( [age] => 20 [name] => li ) )
看到了吧,其實也很簡單,就是那幾個需要大寫的參數有點煩人而已!雖說也有點難以理解,但是理解了就好了,將來很有用的哦!
array_multisort(array1,sorting order,sorting type,array2,array3…)
sorting order 可選。規定排列順序。可能的值:
SORT_ASC - 預設。按升序排列 (A-Z)。
SORT_DESC - 依降序排列 (Z-A)。
sorting type 可選。規定排序類型。可能的值:
SORT_REGULAR - 預設。把每一項依照常規順序排列(Standard ASCII,不改變類型)。
SORT_NUMERIC - 把每一項當作數字來處理。
SORT_STRING - 把每一項當作字串來處理。
SORT_LOCALE_STRING - 把每一項當作字串來處理,基於目前區域設定(可透過 setlocale() 進行變更)。
SORT_NATURAL - 把每一項當作字串來處理,使用類似 natsort() 的自然排序。
SORT_FLAG_CASE - 可以結合(位元或)SORT_STRING 或 SORT_NATURAL 對字串進行排序,不區分大小寫。
相關推薦:
以上是PHP數組排序函數array_multisort()函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!