Сортировать ассоциативный массив по ключу, как имена файлов на компьютере

У меня есть следующая структура:

$arr = [
    'children' => [
        'align.php' => [],
        'default.php' => [],
        'test.php' => [],
        'default-2.php' => [],
    ]
]

В настоящее время я использую

ksort($arr['children'])

и сортирует так:

$arr = [
    'children' => [
        'align.php' => [],
        'default-2.php' => [],
        'default.php' => [],
        'test.php' => [],
    ]
]

Однако мне нужно, чтобы массив был в следующем порядке:

$arr = [
    'children' => [
        'align.php' => [],
        'default.php' => [],
        'default-2.php' => [],
        'test.php' => [],
    ]
]

Я пробовал флаг NATURAL_SORT, но это не сработало. Какие еще есть варианты?

php.net/manual/en/function.natsort.php
Daniel A. White 17.03.2022 01:40

По какой-то причине natsort выдает мне ошибку «Преобразование массива в строку»

Dennis 17.03.2022 01:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете извлечь имена файлов с помощью функции информация о пути, а затем сравнить их в функции обратного вызова в функции уксорт.

uksort($arr['children'], function($a, $b){
    $a = pathinfo($a);
    $b = pathinfo($b);
    return $a['filename'] == $b['filename'] ? 
        $a['basename'] <=> $b['basename'] :
        $a['filename'] <=> $b['filename'];

});

рабочий пример

Решается более сложная сортировка имен файлов с несколькими точками, например, вот так

/* Example:
    a
    a.class
    a.class.php
    a.class.php-1
    a.class-1.php
    a.class-1.php-1
    a-1
    a-1.class.php
    a-1.class-1
    a-1.class-1.php-1
*/

uksort($arr['children'], function($a, $b){
    $a = explode('.', $a);
    $b = explode('.', $b);
    $s = '';
    $i = 0;
    while (isset($a[$i]) && isset($b[$i]) && $a[$i] == $b[$i]) {
        $s .= $a[$i++] . '.'; 
    }
    return $s . ($a[$i] ?? '') <=> $s . ($b[$i] ?? '');
});

рабочий пример

Другие вопросы по теме