Сортировка массива по определенному полю

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

)

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

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


admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago