Это должно быть очень просто, но каков путь для этого. Я хочу сортировать многомерный массив с помощью ключа, например:
Array ( [0] => Array ( [iid] => 1 [invitee] => 174 [nid] => 324343 [showtime] => 2010-05-09 15:15:00 [location] => 13 [status] => 1 [created] => 2010-05-09 15:05:00 [updated] => 2010-05-09 16:24:00 ) [1] => Array ( [iid] => 1 [invitee] => 220 [nid] => 21232 [showtime] => 2010-05-09 15:15:00 [location] => 12 [status] => 0 [created] => 2010-05-10 18:11:00 [updated] => 2010-05-10 18:11:00 ))
Скажем, я хочу сортировать это по [статусу], как бы я это сделал? Заранее спасибо!
//define a comparison function function cmp($a, $b) { if ($a['status'] == $b['status']) { return 0; } return ($a['status'] < $b['status']) ? -1 : 1; } usort($array, "cmp");
Это должно делать то, что вы хотите, вы можете изменить функцию сравнения для сортировки по любому ключу, который вы хотите.
Попробуйте следующее: Использование array_multisort
$sort = array(); foreach($your_array as $k=>$v) { $sort['status'][$k] = $v['status']; } array_multisort($sort['status'], SORT_DESC, $your_array); echo "<pre>"; print_r($your_array);
Ссылка: http://php.net/manual/en/function.array-multisort.php
Функция usort – это то, что вы ищете:
<?php function cmp($a, $b) { return $b["status"] - $a["status"]; } $sorted = usort($your_array, "cmp"); var_dump($sorted); ?>
Попробуй это
function cmp_by_status($a, $b) { if ($a['status'] == $b['status']) { return 0; } return ($a['status'] < $b['status') ? -1 : 1; } usort($data_array, "cmp_by_status");
Я добавил этот ответ в многомерный массив Sort по конкретному ключевому типу сортировки определенного массива для сортировки значения массива.
function sortBy($field, &$array, $direction = 'asc') { usort($array, create_function('$a, $b', ' $a = $a["' . $field . '"]; $b = $b["' . $field . '"]; if ($a == $b) { return 0; } return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1; ')); return true; }
Вызов этой функции с помощью определенного ключа массива
sortBy('status', $array);