array_multisort(array&$array1 [,mixed $array1_sort_order=SORT_ASC] [,mixed $array1_sort_flags=SORT_REGULAR]);
對多個數組或多元數組進行排序。$array1要排序的數組,$array_sort_order前面數組參數要排列的順序,預設升序,$array1_sort_flags為$array1參數設定選項(按照什麼規則排序),成功時傳回true,失敗傳回false。
描述的比較繁瑣,直接看例子會比較容易了解
執行個體1:
$a=array(3,2,6);
$a = array(
0=>3,
1=>2,
2=>6
);
$b=array(5,7,3)
$b=array(
0=>5,
1=>7,
2=>3
);
将數組寫成這種格式有助于下面對函數的了解
運作array_multisort($a,$b)後,列印結果為$a=array(2,3,6),$b=array(7,5,3);
可以這麼了解運作結果(兩個數組相當于相鄰的兩根竹子,數組的元素相當于是一個個熊貓,并且兩根竹子上的熊貓之間用繩子連接配接,一隻熊貓的位置發生改變,另一隻也會相應的改變),這樣就很好了解傳回結果了。
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
這是一個從資料庫查詢的資料集合(二維數組),想要按照volume将數組(一行是一個數組array('volume'=>67,'edition'=>2))進行排序:
首先需要将數組處理成按照列排好的數組array(67,86,85,98,86,67);,array(2,1,6,2,6,7);
是以使用foreach循環将數組處理成已列排列的數組
foreach($data as $k => $v){
$volumn[]=$v['volume'];
$edition[]=$v[edition];
}
然後使用array_multisort($volume,$edition,$data),運作完成後就是按照volumn升序後的結果。
是以可以根據這個思想封裝一個按照某個字段進行排序的方法,供以後使用
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
$arrSort = array();
foreach ($array as $uniqid => $row) {
foreach ($row as $key => $value) {
$arrSort[$key][$uniqid] = $value;
}
}
array_multisort($arrSort[$field], constant($sort), $array);
return $array;
}
其中$array是原數組,$field是要排序的字段(根據num排序),$sort是排序規則(SORT_DESC降序,SORT_ASC升序),constant()函數是根據名稱傳回常量的值。
PS:使用這個函數需要注意的是兩個數組的元素的個數必須一緻,例如$a=array(1,2,3);$b=array(4,5);使用array_multisort($a,$b)就會報錯,因為兩個數組的元素個數不一緻