【问题标题】:Does sort function consider the leaf nodes in a multilevel array?排序函数是否考虑多级数组中的叶节点?
【发布时间】:2011-06-06 11:47:40
【问题描述】:

下面这段代码用于创建一个多级数组,打印它,然后打乱它,再次打印它,并对数组进行排序。

$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 sorting shuffle


    【解决方案1】:

    参见 PHP 的comparison operator reference 的数组部分,尤其是数组比较转录。基本上,PHP 首先比较数组中键的数量,然后检查数组是否具有相同的键(在这种情况下,0 用于内部数组),然后比较值。因为那里有一个嵌套数组,它会继续比较 sort() 中的叶节点,这会导致在这种情况下数组按叶数组的第一个值(adg )。

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

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多