[PHP] array_multisort

這是一個陣列排序的函數
之前雖然有用過
但是那時一直沒搞懂
最近剛好又需要使用
這次弄懂了,就寫一下說明

這函數可以用在多個一維陣列排序
也可以用在一個多維陣列排序
我這邊只說明一個多維陣列的排序
當初也是用這功能,只是一直沒搞懂

我就直接拿php官網的範例來用
資料
volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

排列
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
參數最後的部分是代入此多維陣列
至於前面2個一維陣列是要怎麼用(我就是在這搞不清楚)
原來是當成排列的依據
因為原陣列是多維陣列
所以將原陣列要排序的部分先簡化成一維陣列
再將一維陣列當參數代入來排序
而這範例是簡化2個一維陣列作排序
就是先依照第一個一維陣列排序,再照第二個一維陣列排序
所以當然也可以只照一個或多個一維陣列來排序
就像SQL的order by一樣,可以有多個
只是要先將排序的某一部分輸出成一維陣列出來

結果
volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

標籤: PHP
評論: 0 | 引用: 0 | 閱讀: 3587 | 回到頁首