ser*_*gio 6 php arrays sorting
我使用array_multisort函数完成了一些任务.在编写脚本的过程中,我做了一个var_dump,并$mainArray根据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);
Run Code Online (Sandbox Code Playgroud)
输出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" }
}
}
Run Code Online (Sandbox Code Playgroud)
但是输出为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" }
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这array_multisort($array)不会有影响$mainArray但是:
我真的不明白为什么在第二个变体中它被排序,而在第一个变体中则没有.而且,我应该总是检查不同的PHP版本的脚本?
在这里你可以查看脚本
您的问题似乎是不同版本的 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);
?>
Run Code Online (Sandbox Code Playgroud)
您可能会注意到,我们在 foreach 循环的值中包含了&符号&,因为它们在 PHP5+ 的 foreach 循环中是必需的,以解决我们想要引用该值的问题,以便我们可以直接编辑它。不过,这会在较旧的 PHP 版本中产生错误。
另外, PHP.net 文档中明确指出:
为了能够在循环内直接修改数组元素,请在 $value 之前加上 &。在这种情况下,该值将通过引用分配。