我使用 array_multisort 完成了一些任务功能。在编写脚本的过程中,我执行了一个var_dump
,并根据 PHP 版本得到了不同的 $mainArray
结果。这是代码:
$mainArray = array(
0 =>array(
"key1" => array(7,4,5),
'key2' => array('cc','aa')
)
);
foreach($mainArray as $secondArray){
foreach($secondArray as $array){
array_multisort($array);
}
}
var_dump($mainArray);
4.3.10 - 4.4.9、5.1.1 - 5.5.7
的输出:
array(1) {
[0]=> array(2) {
["key1"]=> array(3) {
[0]=> int(7)
[1]=> int(4)
[2]=> int(5) }
["key2"]=> array(2) {
[0]=> string(2) "cc"
[1]=> string(2) "aa" }
}
}
但是 4.3.0 - 4.3.9, 5.0.0 - 5.0.5
的输出我得到排序数组:
array(1) {
[0]=> array(2) {
["key1"]=> array(3) {
[0]=> int(4)
[1]=> int(5)
[2]=> int(7) }
["key2"]=> array(2) {
[0]=> string(2) "aa"
[1]=> string(2) "cc" }
}
}
我知道 array_multisort($array)
不会对 $mainArray
产生影响,但是:
我真的不明白为什么在第二个变体中它被排序,而在第一个变体中却没有。而且,我是否应该始终检查不同 php 版本的脚本?
Here你可以检查脚本
最佳答案
您的问题似乎是不同版本的 PHP 中 foreach 内部的不同处理。请尝试以下操作。
<?php
$mainArray = array(
0 =>array(
"key1" => array(7,4,5),
'key2' => array('cc','aa')
)
);
foreach($mainArray as &$secondArray){
foreach($secondArray as &$array){
array_multisort($array);
}
}
var_dump($mainArray);
?>
您可能会注意到,我们已经将 & 符号 & 包含在 foreach 循环的值中,因为在 PHP5+ 的 foreach 循环中它们是必需的,以解决我们想要引用该值的问题,以便我们可以编辑它直接。不过,这会在较旧的 PHP 版本中产生错误。
此外,在 PHP.net docs 中明确指出:
In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.
关于PHP array_multisort 意想不到的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013691/