Не так давно мы столкнулись с ситуацией, когда нужно было отсортировать массив данных, которые в базе данных были записаны JSON-строкой.
Сортировка на уровне получения данных из БД в такой ситуации не поможет. Но к счастью нашлось довольно простое и внятное решение на PHP.
Для сортировки ассоциативного массива мы будем использовать следующие функции:
usort
. В PHP нет штатных функций, которые могли бы провернуть такой трюк. Зато есть функция, которая позволяет отсортировать массив с использованием написанной нами логики. Функция для сортировки массива через другую функцию;strnatcmp
. Эта функция сравнивает две строки по алгоритму «natural ordering».
Вообще функция по сравнению строк нужно выбирать исходя из конкретной задачи.
// Исходный массив, который нужно отсортировать
$posts = array(
0 => array(
"title" => "Запись 11",
"date" => "",
"body" => ""
),
1 => array(
"title" => "Запись 100",
"date" => "",
"body" => ""
),
2 => array(
"title" => "Запись 30",
"date" => "",
"body" => ""
),
3 => array(
"title" => "Запись 7",
"date" => "",
"body" => ""
)
);
// Правило, по которому будут сравниваться строки
function cmp($a, $b) {
return strnatcmp($a["title"], $b["title"]);
}
// Сама функция сортировки
usort($posts, "cmp");
А вот и результат:
// print_r($posts);
Array
(
[0] => Array
(
["title"] => "Запись 7"
["date"] =>
["body"] =>
)
[1] => Array
(
["title"] => "Запись 11"
["date"] =>
["body"] =>
)
[2] => Array
(
["title"] => "Запись 30"
["date"] =>
["body"] =>
)
[3] => Array
(
["title"] => "Запись 100"
["date"] =>
["body"] =>
)
)
Все! Даже самая сложная логическая задача по сортировке данных превращается в одно удовольствие.
А вообще, если есть возможность, сортируйте данные на уровне базы данных. Это крайний случай, ну и такое бывает.
Комментариев нет