Итак, Ive получил довольно большой массив данных и должен сортировать их по двум критериям.
Существуют переменные $data['important']
и $data['basic']
.
Они простые числа, и я использую uasort для сортировки $data
во-первых важными, а затем базовыми.
Так
Important | Basic 10 | 8 9 | 9 9 | 7 7 | 9
Функция usort – простая
public function sort_by_important($a, $b) { if ($a[important] > $b[important]) { return -1; } elseif ($b[important] > $a[important]) { return 1; } else { return 0; } }
Как я могу повторно отсортировать массив со второй переменной и сохранить важный порядок?
Всем спасибо.
РЕДАКТИРОВАТЬ
Как насчет добавления третьей опции сортировки после этого? Так важно> Основные> Меньше
Вы действительно должны использовать array_multisort()
,
// Obtain a list of columns foreach ($data as $key => $row) { $important[$key] = $row['important']; $basic[$key] = $row['basic']; } array_multisort($important, SORT_NUMERIC, SORT_DESC, $basic, SORT_NUMERIC, SORT_DESC, $data);
но если вы должны использовать usort()
:
public function sort_by_important($a, $b) { if ($a[important] > $b[important]) { return -1; } elseif ($b[important] > $a[important]) { return 1; } else { if ($a[basic] > $b[basic]) { return -1; } elseif ($b[basic] > $a[basic]) { return 1; } else { return 0; } } }
Почему бы просто не использовать array_multisort ()
public function sort_by_important($a, $b) { if ($a['Important'] > $b['Important']) { return -1; } elseif ($b['Important'] > $a['Important']) { return 1; } else { if ($a['Basic'] > $b['Basic']) { return -1; } elseif ($b['Basic'] > $a['Basic']) { return 1; } else { return 0; } } }