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

5
以下代码旨在创建一个多级数组,打印它,然后对其进行混洗,再次打印它,最后对该数组进行排序。
$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
                )
        )
)
1个回答

3
请查看PHP的比较运算符参考中的数组部分,特别是数组比较转录。基本上,PHP首先比较数组中键的数量,然后检查数组是否具有相同的键(在这种情况下,内部数组的0 ) ,然后比较值。因为你有一个嵌套数组,所以它会继续在sort()中比较叶节点,在这种情况下,导致数组按叶数组的第一个值(a ,d 和g )排序。 shuffle()仅重新排列给定数组的索引,而不管该数组包含什么元素,因此它根本不会接触内部数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接