2017-05-08 46 views
1

二維數組我有一個數組如下:PHP排序由多個子項

//0-based index, 2 dimensions 
$data = array(
    array(
     'name'=>'EJA210E', 
     'id'=>439, 
     'region_id'=>17, 
     .. other attributes .. 
    ), 
    array(
     'name'=>'EJA210E', 
     'id'=>440, 
     'region_id'=>3, 
    ), 
    array(
     'name'=>'EJA210E', 
     'id'=>439, 
     'region_id'=>15, 
    ), 
    .. etc.. 
); 

會是什麼樣,首先由名稱,然後按id,然後通過REGION_ID?通過這些中的任何一種進行排序都沒有問題;我會簡單地循環,並獲得name屬性,然後重新排序,但是這樣做三次我不明白該怎麼做。

+0

你想要的輸出?它會更清晰 –

+3

重複這個http://stackoverflow.com/questions/3232965/sort-multidimensional-array-by-multiple-keys –

+0

如果這來自數據庫,你可能想改變你的查詢 – RST

回答

2

,如下圖所示你可以通過不同的排序列嘗試在array_multisort

$data = array(
    array(
     'name'=>'EJA210E', 
     'id'=>439, 
     'region_id'=>17,   
    ), 
    array(
     'name'=>'EJA210E', 
     'id'=>440, 
     'region_id'=>3, 
    ), 
    array(
     'name'=>'AJA210E', 
     'id'=>438, 
     'region_id'=>15, 
    ) 
); 
// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $name[$key] = $row['name']; 
    $id[$key] = $row['id']; 
    $region[$key] = $row['region_id']; 
} 

// Sort the data with volume descending, edition ascending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($name, SORT_DESC, $id, SORT_DESC,$region, SORT_DESC, $data); 
0

您可以使用usort()自定義排序功能。這裏有一個例子:

function cmp($a, $b) 
{ 
    if ($a['name'] == $b['name']) { 
     if ($a['id'] == $b['id']) { 
     if ($a['region_id'] == $b['region_id']) { 
      return 0; 
     } 
     return $a['region_id'] < $b['region_id'] ? -1 : 1; 
     } 
     return $a['id'] < $b['id'] ? -1 : 1; 
    } 
    return ($a['name'] < $b['name']) ? -1 : 1; 
} 

usort($data, 'cmp');