array_multisort() Часто возникает потребность отсортировать многомерный массив по первому элементу массивов, или по любому, но чтобы остальные элементы то-же "передвигались" согласно с сортируемыми. Например, требуется отсортировать массивы полученные MySQL запросом из разных таблиц по дате и.т.п. В мануале PHP есть функция array_multisort() - Сортировка релятивных массивов. Что же про неё написано, и даже с примерами.... (см. внизу) ... ничего не понятно. Вот как я делаю. Надо отсортировать двумерный массив (то есть обычную таблицу) по первому столбцу. Таблица: 9 7 1 2 4 8 5 1 4 3 2 8 Тут главное не ошибиться в индексах массивов, первым должен быть номер столбца!!!, а вторым строки. То есть как то не привычно, "раком". По данной таблице: $ar[0][0]=9; $ar[1][0]=7; $ar[2][0]=1; $ar[0][1]=2; $ar[1][1]=4; $ar[2][1]=8; $ar[0][2]=5; $ar[1][2]=1; $ar[2][2]=4; $ar[0][3]=3; $ar[1][3]=2; $ar[2][3]=8; Это для наглядности. Загнать таблицу в массив просто циклами. Вот теперь можно сортировать: array_multisort($ar[0], SORT_ASC, $ar[1], $ar[2]); Не забываем дописывать в параметрах функции после сортировки по возрастанию (убыванию) остальные индексы столбцов. После сортировки имеем: $ar[0][0] - (2); $ar[1][0] - (4); $ar[2][0] - (8); $ar[0][1] - (3); $ar[1][1] - (2); $ar[2][1] - (8); $ar[0][2] - (5); $ar[1][2] - (1); $ar[2][2] - (4); $ar[0][3] - (9); $ar[1][3] - (7); $ar[2][3] - (1); 2 4 8 3 2 8 5 1 4 9 7 1 Что нам и надо! Пример использования можно посмотреть на главной странице, таблица "Обновления в разделах": http://fc-dynamo.ru/soccer/ Одним SQL заросом, из-за разной структуры таблиц разделов, вытащить данные не удалось. Пришлость загнать их в один двумерный массив PHP, и отсортировать по времени сообщения. Удачи!!! Мануал: Синтаксис: bool array_multisort(array ar1, [, mixed o1 [, mixed t1 ... [, array ...]]]) Функция array_multisort() сортирует многомерные массивы с сохранением индексной ассоциации, возвращая true при отсутствии ошибок. Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется. Приоритетом сортировки пользуются первые массивы. Флаги сортировки могут указываться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны. Флаги определения порядка сортировки (аргументы ox): SORT_ASC - сортировка в порядке возрастания (по умолчанию) SORT_DESC - сортировка в порядке убывания Флаги типа сортировки (аргументы tx): SORT_REGULAR - сравнивать элементы как есть (по умолчанию) SORT_NUMERIC - сравнивать элементы как числа SORT_STRING - сравнивать элементы как строки Пример: ar1 = array("10", 100, 100, "a"); ar2 = array(1, 3, "2", 1); array_multisort($ar1, $ar2); // $ar1 = array("10", "a", 100, 100); // $ar2 = array(1, 1, "2", 4); Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированы. $ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1)); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], $SORT_NUMERIC, SORT_DESC); $ar[0] = ("10", 100, 100, "a") - сортируются как строки по возрастанию $ar[1] = (1, 3, "2", 1) - сортируются как числа по убыванию. |
|
|
|