@kimqar202

Как отсортировать массив игнорируя определённое слово в строке?

Есть несколько массивов, которые отсортированы по буквам:
[А] => Array
        (
            [0] => Array
                (
                    [NAME] => Абдоминальная хирургия
               )
[Б] => Array
        (
            [0] => Array
                (
                    [NAME] => Бариатрическая хирургия
                )
[В] => Array
        (
            [0] => Array
                (
                    [NAME] => Венерологическая клиника
                )


Всё отсортировано по первому слову, но в букве "д" нужно сделать так, чтоб у значений которых есть первое слово "десткий/детская" сортировались по второму слову.

Например:
В массиве "Д" есть значения:

[Д] => Array
        (
            [0] => Array
                (
                    [NAME] => Детская клиника
                )
            [1] => Array
                (
                    [NAME] => Дерматология
                )
            [2] => Array
                (
                    [NAME] => Детская урология
                )


Нужно сделать так, чтобы "детская клиника" попала в массив с буквой К, а "детская урология" в массив с буквой У. Таких значений на странице много. Как это сделать?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
проще перед группировкой (сортировкой) подготовить строки
например вырезать из них слова детск(ий|ая|ое)

<?php
$names = [
    'Абдоминальная хирургия',
    'Бариатрическая хирургия',
    'Бариатрическая хирургия',
    'Венерологическая клиника',
    'Детская клиника',
    'Дерматология',
    'Детская урология',
    'Детский тест',
    'Детское тесто',
];

$result = [];
foreach ($names as $name) {
    $l = mb_strtoupper(mb_substr(
        trim(preg_replace('!детск(ий|ая|ое)!usi', '', $name)),
        0, 1
    ));

    $result[$l][] = ['NAME' => $name];
}

print_r($result);


...
    [У] => Array
        (
            [0] => Array
                (
                    [NAME] => Детская урология
                )
        )
    [Т] => Array
        (
            [0] => Array
                (
                    [NAME] => Детский тест
                )
            [1] => Array
                (
                    [NAME] => Детское тесто
                )
        )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы