按字母排序数组,然后数字不起作用

时间:2018-06-08 15:40:19

标签: php arrays sorting

/开始更新/

如果我定位单个数组数组但不是数组数组数组,则以下解决方案将有效。

这只是关联数组的一部分,每个分组的部分都需要进行排序。请参阅更新的数组。

我已经尝试了以下内容,它似乎没有点击子阵列:

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

/更新结束/

尝试变体usortsort和以下函数:

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 :(得分:1)

如果你有一个多维数组,你可以使用array_map并在回调函数中使用usort

在回调中使用strnatcmp

例如:

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

Demo

对于具有多个名称的单个数组,您可以使用:

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

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

Demo