2

2D 配列をその列の 1 つで並べ替えたい...たとえば:

$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),
);

payment( DESC) とtime( )で並べ替えたいASC。したがって、ソートされた配列は次のようになります。

$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

4

2 に答える 2

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
        )

)
于 2012-04-25T13:02:31.813 に答える
0

はい、usort がここでの答えです。私の意見では、PHP の array_multisort は、自然にフォーマットされたテーブル データを個別の配列に分解する必要があるため、奇妙な動作をします。

これは、多次元配列でフォーマットされたテーブル データの複数列の並べ替えのための基本的なソリューションです。

http://pastebin.com/9vCy1jxH

于 2013-10-16T15:43:47.263 に答える