2010-08-06 266 views
5

我有以下數組。我需要排序的嵌套數組鍵[ID]此數組:PHP排序多維數組

Array ( 
[0] => Array ([id] => 5 [category_id] => 12) 
[1] => Array ([id] => 3 [category_id] => 12) 
[2] => Array ([id] => 9 [category_id] => 12) 
[3] => Array ([id] => 4 [category_id] => 12) 
) 
+0

重複的http://stackoverflow.com/questions/3376607/help-sorting-this-array/3376735#3376735 – stillstanding 2010-08-06 14:19:43

回答

2

,你可以做這樣的

foreach($arr as $val) { 
    $ret[$val['id']] = $val['category_id']; 
} 
ksort($ret); 

如果你想獲得相同的數組進行排序,那麼你可以添加以下代碼:

foreach($ret as $key=>$val) { 
    $newArr[] = array('id'=>$key,'category_id'=>$val); 
} 
0

嘗試array_multisort它將通過內陣列的第一密鑰/屬性

0
function sort_by_field($field, & $data) { 
    $sort_func = create_function('$a,$b', 'if ($a["' . $field . '"] == $b["' . $field . '"]) {return 0;} 
      return ($a["' . $field . '"] < $b["' . $field . '"]) ? -1 : 1;'); 

    uasort($data, $sort_func); 
} 
8

使用usort與外數組進行排序自定義比較功能。

<?php 

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

$array = Array ( 
    0 => Array ('id' => 5, 'category_id' => 12), 
    1 => Array ('id' => 4, 'category_id' => 12), 
    2 => Array ('id' => 7, 'category_id' => 12), 
    3 => Array ('id' => 3, 'category_id' => 12), 
); 

usort($array, 'cmp'); 

// Output: 3 4 5 7 
foreach ($array as $element) 
    echo $element['id'], " "; 
+0

+1一個很好的通用解決方案。 – Centurion 2010-08-06 14:18:00

+0

您可以在'cmp'函數中返回'$ a ['id'] - $ b ['id']''。 – Artefacto 2010-08-06 21:37:25

1

爲什麼不只是像這樣存儲您的數據?

Array ( 
    [5] => int(12) 
    [3] => int(12) 
    [9] => int(12) 
    [4] => int(12) 
) 

然後,您可以照常使用ksort()

+1

這就是我如何做數組,我只需要將兩個數字映射在一起。它可能不那麼明確,但它的確讓它變得更加容易。 – tj111 2010-08-06 14:03:44