Нацорт многомерный массив - PullRequest
       14

Нацорт многомерный массив

0 голосов
/ 13 сентября 2010

У меня есть многомерный массив, подобный этому:

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))

Мне нужно отсортировать внутренние массивы так, чтобы данные возвращались в естественном порядке по ключу дней.

I.E как это:

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))

Я думаю, что мне нужна функция, которая применяет natsort к многомерному массиву с помощью $ key, но до сих пор я не смог найти никаких функций, которые бы делали что-то кроме стандартной сортировки.

Любая помощь?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

То, что вы хотите: usort .

Вы можете написать обратный вызов, чтобы сделать сравнение для вас:

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

Отказ от ответственности: Вам нужен PHP 5.3.xчтобы это работало, иначе вам придется прибегнуть к create_function или предопределить функцию сравнения.

0 голосов
/ 13 сентября 2010

Немного другой подход:

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

)
...