PHP array_multisort 意想不到的影响

标签 php arrays sorting

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

相关文章:

php - 搜索关联数组的这个 php 数组的快速方法

arrays - 从字典数组中提取元素

php - php中的数组,比较2个数组并保留重复值

ios - 无法以数字方式对 NSArray 中的自定义对象进行排序

Java 排序函数

java - 按 ArrayList 中 ArrayList 的第一个条目排序

php - MySqLi 由于某种原因无法工作

php - 绑定(bind)模型后我的条件不工作 Cakephp

php - 有效地从数据库中读取给定记录 ID 数组的多条记录

php - org.json.JSONException : Value DB of type java. lang.String 无法转换为 JSONObject