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