gpt4 book ai didi

PHP array_multisort 意想不到的影响

转载 作者:可可西里 更新时间:2023-11-01 13:26:22 26 4
gpt4 key购买 nike

我使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com