Ответ 1
Вы можете использовать функцию usort.
function cmp($a, $b) {
return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");
У меня есть этот массив
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
Спасибо
Вы можете использовать функцию usort.
function cmp($a, $b) {
return $a["mid"] - $b["mid"];
}
usort($arr, "cmp");
Другое решение использует 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);
?>
Недавно я ответил на этот вопрос гораздо более способным образом в "окончательной" теме по сортировке многомерных массивов. Ниже приведен пример старых версий 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');
Все это находится в документации.