Сортировка массива по значению ключа с использованием регулярного выражения

282
23 марта 2017, 22:31

Здравствуйте. Помогите с сортировкой массива.

 [0] => Array
        (
            [id] => 1
            [VALUE] => г. Москва
        )
    [1] => Array
        (
            [id] => 2
            [VALUE] => д. Волки
        )
    [2] => Array
        (
            [id] => 3
            [VALUE] => х. Орехово
        )
    [3] => Array
        (
            [id] => 4
            [VALUE] => пос. Братылово
        )

Необходимо отсортировать по значению ключа [VALUE], в алфавитном порядке, при этом игнорировать префиксы (г., д. ...). Результат должен быть:

  1. пос. Братылово
  2. д. Волки
  3. г. Москва
  4. х. Орехово

    function cmp($a, $b)
    {
    };    
    usort($Array, 'cmp');
    

Спасибо!

Answer 1
  • В функции компаратора порезать значения по пробелу
    3 параметр limit позволяет порезать по первому пробелу на 2 части

  • Сравнить выделенные строки удобным способом, (вернуть {-1, 0, 1})

синтаксис php >=7

$data = [
    ['id' => 1, 'VALUE' => 'г. Москва'],
    ['id' => 2, 'VALUE' => 'д. Волки'],
    ['id' => 3, 'VALUE' => 'х. Орехово'],
    ['id' => 4, 'VALUE' => 'пос. Братылёво'],
];
usort($data, function($a, $b) {
   $a = preg_split('/\s+/', $a['VALUE'], 2);
   $b = preg_split('/\s+/', $b['VALUE'], 2);
   return $a[1] <=> $b[1];
});
echo json_encode($data, JSON_UNESCAPED_UNICODE)."\n";
echo json_encode(array_map(function($a){return $a['VALUE'];}, $data), JSON_UNESCAPED_UNICODE)."\n";
[{"id":4,"VALUE":"пос. Братылёво"},{"id":2,"VALUE":"д. Волки"},{"id":1,"VALUE":"г. Москва"},{"id":3,"VALUE":"х. Орехово"}]
["пос. Братылёво","д. Волки","г. Москва","х. Орехово"]

3v4l.org

READ ALSO
Ошибки с PHP7.0-FPM

Ошибки с PHP7.0-FPM

Что есть: 2 сайта на Laravel 51; Сервер Ububntu 16

188
Добавление данных в json, через форму

Добавление данных в json, через форму

Почему после отправки корректных данных, файл datajson не дополняется?

301
Авторизация между доменом и субдоменом

Авторизация между доменом и субдоменом

Пытаюсь реализовать авторизацию между моби десктоп версиями сайта

146
Подключение к Ldap-серверу на php

Подключение к Ldap-серверу на php

Ребят нужно с помощью php подключиться к Ldap-серверу в локальной сети и вывести все что там есть, вопрос вывода я решу, а вот как подключиться...

252