Как отсортировать массив PHP принятый из БД по определенному полю?
Имеется массив PHP включающий в себя таблицу из БД, мне надо его отсортировать по полю содержащее в себе дату. Как это сделать?(пробовал array_multisort но почему то выдало ошибку, может беда во мне?)
$today = date("Y-m-d"); // Формат даты делаем такой же как и в базе данных
$query = "SELECT * FROM `Полина` WHERE date >='$today'";
Ответы (3 шт):
Вам нужна обычная сортировка, которую вы можете организовать в самом запросе при помощи ORDER BY. Уточните, какая сортировка необходима и приложите код.
$today = date("Y-m-d"); // Формат даты делаем такой же как и в базе данных
$query = "SELECT * FROM `Полина` WHERE date >='$today' ORDER BY date DESC"; // DESC - сортировка по убыванию, ASC - по возрастанию
В запросе и отсортируйте, если к запросу есть доступ. Средствами сервера БД такая сортировка ещё и проделана будет в разы быстрее, чем любой код на php, который вы напишите.
Что-нибудь вроде этого:
select * from table order by pole1
где table - имя таблицы, а pole1 - любое нужное вам для сортировки поле. И да, запрос я написал в очень упрощённом виде.
Стандартные функции PHP сортируют только одномерные массивы (например: [5, 10, 15, 30, 2, 14, 33]). Выборка из базы данных представляет многомерный массив, то есть что-то вроде:
Array(
[0] => Array(
'username' => 'John',
'password' => '111111',
),
[1] => Array(
'username' => 'Bob',
'password' => '222222'
)
)
Средствами PHP сортировать многомерные массивы – не лучшая идея. Во-первых: это делается через костыли, а во-вторых: затраты по времени на сортировку многомерного массива значительно выше.
Как советовали выше, используйте выражение ORDER BY непосредственно в SQL-запросе:
$query = mysqli_query("SELECT * FROM `users` ORDER BY `registration_date`");
Оно умеет работать как с датами, с числами (в том числе с UNIX-time), так и со строками (сортируя по алфавиту).
Так же, Вы можете использовать данное выражение в сочетании с ASC/DESC, чтобы сортировать значения по возрастанию (ASC, по умолчанию) или по убыванию (DESC):
SELECT * FROM `users` ORDER BY `registration_date` DESC;
– вернёт список пользователей, отсортированных по полю "registration_date" в порядке убывания (то есть сначала - новых, ниже - старых).