Сортировка массива по буквам, тогда числа не работают - PullRequest
0 голосов
/ 08 июня 2018

/ Begin Updates /

Приведенные ниже решения будут работать, если я нацеливаюсь на один массив массивов, но не на массив массивов массивов.

Это только часть ассоциативного массива, каждый сгруппированный фрагмент должен быть отсортирован.Смотрите обновленный массив.

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

function natorder($a, $b){
  return strnatcmp( $a['name'], $b['name'] );
}
usort($array, 'natorder');

/ Конец обновлений /

Попробовать варианты usort, sort и следующую функцию:

function sortNames($a, $b){
 return $a['name'] - $b['name'];
}

Я не могу отсортировать мой массив:

    [abc-abc] => Array
        (
            [0] => Array
                (
                    [name] => abc-abc-34
                    [qty] => 4
                    [sub_qty] => 4
                    [area] => G11
                )

            [1] => Array
                (
                    [name] => abc-abc-45
                    [qty] => 145
                    [sub_qty] => 146
                    [area] => G11
                )

            [2] => Array
                (
                    [name] => abc-abc-67
                    [qty] => 215
                    [sub_qty] => 100, 
116
                    [area] => T, 
G12
                )

            [3] => Array
                (
                    [name] => abc-abc-56
                    [qty] => 0
                )

        )
    [def-def] => Array
        (
            [0] => Array
                (
                    [name] => def-def-34
                    [qty] => 4
                    [sub_qty] => 4
                    [area] => G11
                )

            [1] => Array
                (
                    [name] => def-def-45
                    [qty] => 145
                    [sub_qty] => 146
                    [area] => G11
                )

            [2] => Array
                (
                    [name] => def-def-56
                    [qty] => 0
                )

        )

По следующему номеру:

        [abc-abc] => Array
            (
                [0] => Array
                    (
                        [name] => abc-abc-34
                        [qty] => 4
                        [sub_qty] => 4
                        [area] => G11
                    )

                [1] => Array
                    (
                        [name] => abc-abc-45
                        [qty] => 145
                        [sub_qty] => 146
                        [area] => G11
                    )

                [2] => Array
    (
                        [name] => abc-abc-56
                        [qty] => 0
                    )


                [3] => Array
                    (
                        [name] => abc-abc-67
                        [qty] => 215
                        [sub_qty] => 100, 
    116
                        [area] => T, 
    G12
                    )

            )
[def-def] => Array
            (
                [0] => Array
                    (
                        [name] => def-def-34
                        [qty] => 4
                        [sub_qty] => 4
                        [area] => G11
                    )

                [1] => Array
                    (
                        [name] => def-def-45
                        [qty] => 145
                        [sub_qty] => 146
                        [area] => G11
                    )

                [2] => Array
                    (
                        [name] => def-def-56
                        [qty] => 0
                    )

            )

Нужно ли учитывать дополнительные ключи, отсутствующие в abc-abc-56?Есть ли альтернативный инструмент или функция, которую я должен использовать?

Имя всегда будет иметь формат из 3 букв, тире, за которым следуют 3 буквы, но после этого оно меняется в зависимости от других символов и цифр.Так что это может быть:

abc-abc-1, abc-abc1, abc-abc.1 или abc-abc_1

, но меня больше всего волнуетпервый шаблон отсортирован правильно.

Ваш отзыв очень важен!

1 Ответ

0 голосов
/ 08 июня 2018

Если у вас есть многомерный массив, вы можете использовать array_map и использовать usort в функции обратного вызова.

В обратном вызове usort используйте strnatcmp .

Например:

$array = array_map(function($x){
    usort($x, function($a, $b){
        return strnatcmp($a['name'], $b['name']);
    });
    return $x;
}, $array);

Демо

Для одного массива с несколькими именами вы можете использовать:

function sortNames($a, $b)
{
    return strnatcmp($a['name'], $b['name']);
}

usort($array, "sortNames");
print_r($array);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...