sort函数是否考虑多级数组中的叶节点?

Suj*_*wal 5 php sorting shuffle

下面这段代码用于创建一个多级数组,打印它,然后将其洗牌,再打印它,并对数组进行排序.

$arr=array(
        array(
            array('a','b','c')
        ),
        array(
            array('d','e','f')
        ),
    array(
            array('g','h','i')
        ),
);
print_r($arr);
shuffle($arr);
print_r($arr);
sort($arr);
print_r($arr);
Run Code Online (Sandbox Code Playgroud)

现在我观察到奇怪的事情,当shuffle()它被使用时,它只会改变正在被洗牌的数组的索引,它不会随机播放,内部最多的元素转换a,b,c为其他东西,但是当使用该sort()函数时,它会对数组进行排序进入正常状态,叶节点返回字母顺序.为什么会这样?

以下是示例输出: *原始数组*

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => a
                    [1] => b
                    [2] => c
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => d
                    [1] => e
                    [2] => f
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => g
                    [1] => h
                    [2] => i
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

随机数组

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => g
                    [1] => h
                    [2] => i
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => a
                    [1] => b
                    [2] => c
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => d
                    [1] => e
                    [2] => f
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

排序数组

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => a
                    [1] => b
                    [2] => c
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => d
                    [1] => e
                    [2] => f
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => g
                    [1] => h
                    [2] => i
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

Sha*_*kka 3

请参阅 PHP比较运算符参考的数组部分,尤其是数组比较转录。基本上,PHP 首先比较数组中键的数量,然后检查数组是否具有相同的键(在本例中,0对于内部数组),然后比较值。因为那里有一个嵌套数组,所以它会继续比较 中的叶节点sort(),这导致在这种情况下该数组按叶数组(adg)的第一个值进行排序。

shuffle()无论数组包含什么,都会简单地重新排序您给它的数组的索引,因此它根本不会触及内部数组。