Не так давно мы столкнулись с ситуацией, когда нужно было отсортировать массив данных, которые в базе данных были записаны 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] => 
        )

)

Все! Даже самая сложная логическая задача по сортировке данных превращается в одно удовольствие.

А вообще, если есть возможность, сортируйте данные на уровне базы данных. Это крайний случай, ну и такое бывает.


Комментариев нет

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

*

*