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


Does sort function consider the leaf nodes in a multilevel array?

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

$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] => 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()中的叶节点,这导致在这种情况下,该数组按照叶数组的第一个值(adg)进行排序。

shuffle()只是重新排序您给它的数组的索引,而不管该数组包含什么,因此它根本不会触及内部数组。