0

私はこのような多次元配列を持っています:

array ([0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22) 
[2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3))

データが日キーによって自然な順序で返されるように、内部配列を並べ替える必要があります。

このようなIE:

array ([2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3)
[0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22))

必要なのは$keyで多次元配列にnatsortを適用する関数だと思いますが、これまでのところ、標準のソート以外の機能を見つけることができませんでした。

何か助けはありますか?

4

3 に答える 3

3

あなたが欲しいのはusortです。

比較を行うためのコールバックを作成できます。

usort($data, function($a, $b) {
    return ($a['days'] > $b['days'])
           ? 1 
           : ($a['days'] < $b['days'])
             ? -1 
             : 0;
});

免責事項:これを機能させるにはPHP 5.3.xが必要です。そうでない場合は、create_functionを使用するか、compare関数を事前定義する必要があります。

于 2010-09-13T11:06:09.593 に答える
1

以下は私のために働いた、

usort($array, function($a, $b) {
    return strnatcasecmp($a['days'], $b['days']);
});

ここから見つかりました:-https://learntech.imsu.ox.ac.uk/blog/php-naturally-sorting-multidimension-arrays-by-string-values/

誰かがこれが役立つことを願っています。

于 2019-12-27T11:19:36.867 に答える
0

少し異なるアプローチ:

$days = array();
foreach($array as $key => $val) {
    $days[$key] = $val['days'];
}
array_multisort($days, $array); //$array being your input array

結果:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Jay Doe
            [title] => Mr
            [days] => 3
        )

    [1] => Array
        (
            [id] => 1
            [name] => John Doe
            [title] => Mr
            [days] => 10
        )

    [2] => Array
        (
            [id] => 2
            [name] => Joe Doe
            [title] => Mr
            [days] => 22
        )

)
于 2010-09-13T11:32:19.860 に答える