天天看點

PHP使用array_multisort對二維數組進行排序

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)就會報錯,因為兩個數組的元素個數不一緻