Натуральная сортировка многомерного массива на PHP

Сегодня пришлось решать проблему натуральной сортировки многомерного массива, полученных из БД данных на PHP. Подробности далее.

При получении данных из БД MySQL, мною был получен многомерный массив примерно следующего вида:

    array(9) {
      [0]=>
      array(7) {
        ["version"]=>string(9) "1.0.4.100"
        ["previous_version"]=>string(8) "1.0.4.88"
      }
      [1]=>
      array(7) {
        ["version"]=>string(9) "1.0.4.106"
        ["previous_version"]=>string(9) "1.0.4.100"
      }
      [2]=>
      array(7) {
        ["version"]=> string(9) "1.0.4.128"
        ["previous_version"]=> string(9) "1.0.4.106"
      }
    }

В данном случае мне необходимо произвести натуральную сортировку по полю «version», для этого воспользуемся функцией PHP natsort(), но т.к. данная функция работает только с одномерными массивами, придется как-то вывернуться.

Далее моё решение:

// $result_db - массив с данными из БД в формате, указанном выше.

// Формируем временный одномерный массив с необходимым для сортировки полем, 
// с обязательным указанием ключа старого массива в ключе нового
foreach ($result_db as $key=>$value) {
      $tmp_array[$key] = $value['version'];
}
// Полученный одномерный массив сортируем функцией natsort()
natsort($tmp_array);
// Теперь формируем новый отсортированный массив данных на основе отсортированного
// временного одномерного массива, попутно восстанавливая информацию по вложенным 
// массивам с помощью указанного выше ключа.
foreach ($tmp_array as $key=>$value) {
      $result[] = $result_db[$key];
}

Решение не сложное, но мне потребовалось некоторое время, чтобы его придумать. Если кому-то пригодится — буду рад.

Скриншот из интерфейса в стиле «Было/Стало»:

P.S. Да, разрабатываю кое-что для телефонов Grandstream — возможно скоро будет анонс проекта (UPD: GRCentral).

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

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