Подтвердить что ты не робот

Сортировка многомерного массива php по суб-значению

У меня есть этот массив

Array
(
[data] => Array
    (
        [0] => Array
            (

                [id] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006034
                [initial_timestamp] => 1293005125
                [user] => administrator
            )

        [1] => Array
            (

                [mid] => 1293001908
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293001908
                [initial_timestamp] => 1293001908
                [user] => administrator
            )

        [2] => Array
            (

                [mid] => 1293009999
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293009999
                [initial_timestamp] => 1293009999
                [user] => administrator
            )

        [3] => Array
            (

                [mid] => 1293006666
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006666
                [initial_timestamp] => 1293006666
                [user] => administrator
            )

        [4] => Array
            (

                [mid] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006125
                [initial_timestamp] => 1293005125
                [user] => administrator2
            )


    )

Теперь я хотел бы отсортировать этот массив [mid] Как это сделать?

В настоящее время я сортирую это в цикле foreach
Должен быть лучший способ

ИЗМЕНИТЬ Я надеялся выпустить что-то вроде

[mid] key => array value

Спасибо

4b9b3361

Ответ 1

Вы можете использовать функцию usort.

function cmp($a, $b) {
        return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");

Посмотрите

Ответ 2

Другое решение использует array_multisort

<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $mid[$key]  = $row['mid'];
}

// Sort the data with mid descending
// Add $data as the last parameter, to sort by the common key
array_multisort($mid, SORT_DESC, $data);
?>

Ответ 3

Update

Недавно я ответил на этот вопрос гораздо более способным образом в "окончательной" теме по сортировке многомерных массивов. Ниже приведен пример старых версий PHP (5.2 и более ранних); в то время как концепция звучит, в наши дни есть намного лучшие способы делать вещи. Вместо этого прочитайте ответы на другой вопрос.

Ответ на оригинал (очень устаревший)

usort существует именно для этой ситуации. Если вам также нужны ключи для сохранения, то соответствующая функция будет uasort.

Например:

usort($array, create_function('$a, $b',
   'if ($a["mid"] == $b["mid"]) return 0; return ($a["mid"] < $b["mid"]) ? -1 : 1;'));

Конечно, если вы не возражаете, вы можете правильно объявить функцию сравнения:

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

И используйте его следующим образом:

usort($array, 'compareMid');

Все это находится в документации.