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

时间:2011-06-06 11:47:40

标签: 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);

现在我观察到奇怪的事情,当使用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 个答案:

答案 0 :(得分:3)

参见PHP comparison operator reference的数组部分,尤其是数组比较转录。基本上PHP首先比较数组中的键数量,然后检查数组是否具有相同的键(在这种情况下,内部数组为0),然后比较这些值。因为那里有一个嵌套数组,所以它继续比较sort()中的叶节点,这导致数组在这种情况下被叶子数组的第一个值排序(a,{{1 }和d)。

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