Php 排序函数是否考虑多级数组中的叶节点?

Php 排序函数是否考虑多级数组中的叶节点?,php,sorting,shuffle,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)

下面的代码旨在创建一个多级数组,打印它,然后洗牌,再次打印它,并对数组进行排序

$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);
现在我观察到一件奇怪的事情,当使用
shuffle()
时,它只对正在被洗牌的数组的索引进行洗牌,它不会将最内部的元素
a、b、c
洗牌到其他元素,而是在使用
sort()
函数时,它将数组重新排序为正常状态,叶节点恢复为字母顺序。为什么会发生这种情况

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

洗牌数组

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
                )
        )
)
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
                )
        )
)
排序数组

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
                )
        )
)
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
                )
        )
)

请参阅PHP的数组部分,特别是数组比较。基本上,PHP首先比较数组中键的数量,然后检查数组是否具有相同的键(在本例中,内部数组为
0
),然后比较值。因为这里有一个嵌套数组,所以它继续比较
sort()
中的叶节点,这导致在这种情况下,数组按照叶数组的第一个值进行排序(
a
d
g

shuffle()