2012-04-25 35 views
1

排序多維數組欲通過它的列中的一個進行排序的2D陣列... forexample:由2列

$a = array(
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000), 
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000), 
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000), 
); 

我想通過paymentDESC)和timeASC對它進行排序, )。 所以數組排序應該是這樣的:

$a = array(
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000), 
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000), 
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000), 
); 

怎麼辦呢? 謝謝,


我已經找到了解決辦法:

foreach ($a as $key => $row) { 
     $payment[$key] = $row['payment']; 
     $time[$key] = $row['time']; 
    } 

    array_multisort($payment, SORT_DESC, $time, SORT_ASC, $a); 

來源:http://php.net/manual/en/function.array-multisort.php

+0

然後添加它作爲答案,並儘快接受它。 – 2012-04-25 12:50:31

回答

2

你可以使用usort

$arr = array(
    'user4' => array('name' => 'u4', 'payment' => 1000, 'time' => 5000), 
    'user2' => array('name' => 'u2', 'payment' => 2000, 'time' => 5000), 
    'user3' => array('name' => 'u3', 'payment' => 2000, 'time' => 3000), 
); 

function mySort($a,$b) { 
    if ($a['payment'] == $b['payment']) { 
     return $a['time'] - $b['time']; 
    } else { 
     return $b['payment'] - $a['payment']; 
    } 
} 
usort($arr, 'mySort'); 
print_r($arr); 

輸出:

Array 
(
    [0] => Array 
     (
      [name] => u3 
      [payment] => 2000 
      [time] => 3000 
     ) 

    [1] => Array 
     (
      [name] => u2 
      [payment] => 2000 
      [time] => 5000 
     ) 

    [2] => Array 
     (
      [name] => u4 
      [payment] => 1000 
      [time] => 5000 
     ) 

) 
0

是usort是這裏的答案。在我看來,PHP array_multisort的行爲很奇怪,迫使你將自然格式化的表數據分解爲單獨的數組。

這是一個用於表格數據格式化多維數組多列排序的裸機解決方案。

http://pastebin.com/9vCy1jxH

+0

通常建議將(相關)代碼作爲建議解決方案的一部分發布,而不是鏈接到外部頁面。 – Fr0zenFyr 2016-08-20 11:07:44