Кто-то, должно быть, придумал решение для этого. Мы используем PHP 5.2. (Не спрашивайте меня почему.) Я написал класс PHP для отображения набора записей в виде таблицы / datagrid HTML, и я хочу расширить его, чтобы мы могли сортировать datagrid по любому столбцу, который пользователь выбирает. В приведенных ниже примерах нам может понадобиться отсортировать массив записей по полям Name, Shirt, Assign или Age. Я позабочусь о части дисплея, мне просто нужна помощь в сортировке массива данных.
Как обычно, я запрашиваю базу данных, чтобы получить результат, повторить его результат и поместить записи в массив assciateiave. Итак, мы получаем массив массивов. (См. Ниже.) Мне нужно иметь возможность сортировать по любому столбцу в наборе данных. Тем не менее, я не буду знать имена столбцов во время разработки, и не знаю, будут ли столбцы строковыми или числовыми значениями.
Я видел массу решений для этого, но я не видел решения GOOD и GENERIC. Кто-нибудь может предложить способ, которым я могу сортировать массив записей, который является GENERIC, и будет работать на любом наборе записей? Опять же, я не буду знать имена полей или типы данных во время разработки. Массив, представленный ниже, является ТОЛЬКО примером.
UPDATE: Да, я бы хотел, чтобы база данных выполняла сортировку, но этого просто не произойдет. Запросы, которые мы запускаем, очень сложны. (Я действительно не запрашиваю таблицу символов Star Trek.) Они включают в себя объединения, ограничения и сложные предложения WHERE. Написание функции для выделения инструкции SQL для добавления ORDER BY действительно не является вариантом. Кроме того, иногда у нас уже есть массив, являющийся результатом запроса, а не возможность запуска нового запроса.
Array ( [0] => Array ( [name] => Kirk [shrit] => Gold [assign] => Bridge ) [1] => Array ( [name] => Spock [shrit] => Blue [assign] => Bridge ) [2] => Array ( [name] => Uhura [shrit] => Red [assign] => Bridge ) [3] => Array ( [name] => Scotty [shrit] => Red [assign] => Engineering ) [4] => Array ( [name] => McCoy [shrit] => Blue [assign] => Sick Bay ) )