php - 为什么我不能对嵌套数组进行数字排序?

标签 php sorting multidimensional-array

我有一个二维数组,如下所示:

array(2) {
  [45]=>
  array(5) {
    [0]=>
    int(2)
    [1]=>
    int(5)
    [2]=>
    int(1)
    [3]=>
    int(3)
    [4]=>
    int(4)
  }
  [42]=>
  array(5) {
    [0]=>
    int(5)
    [1]=>
    int(4)
    [2]=>
    int(3)
    [3]=>
    int(2)
    [4]=>
    int(1)
  }
}

外层数组的键值为数值,但不从0开始,不连续。我想通过升序键对外部数组进行排序,并通过升序值对内部数组进行排序,所以我尝试这样做:

ksort($arr);
foreach ($arr as $a) {
    sort($a);
}
var_dump($arr);

它按预期对外部数组进行排序,但似乎根本没有触及内部数组:

array(2) {
  [42]=>
  array(5) {
    [0]=>
    int(5)
    [1]=>
    int(4)
    [2]=>
    int(3)
    [3]=>
    int(2)
    [4]=>
    int(1)
  }
  [45]=>
  array(5) {
    [0]=>
    int(2)
    [1]=>
    int(5)
    [2]=>
    int(1)
    [3]=>
    int(3)
    [4]=>
    int(4)
  }
}

这是为什么,我怎样才能达到我想要的效果?我认为这与嵌套数组有关,因为以下内容按预期工作:

$test = array(5,2,3,1,4);
sort($test);
var_dump($test);

array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}

最佳答案

foreach 遍历数组的副本。如果要修改实际值,则必须引用它们:

//               v
foreach ($arr as &$a) {
    sort($a);
}
unset($a);

来自documentation :

As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.

关于php - 为什么我不能对嵌套数组进行数字排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064715/

相关文章:

python - Numba 中的 Numpy 聚合函数垫片、打字和 np.sort()

php - 通过 jQuery .ajax 发送嵌套数组

PHP 检查最不繁忙的 MySQL 服务器

php - 使用 Codeigniter 框架缓存 REST api

php - iconv 在使用 libiconv 时将重音符号与字母分开

javascript - DataTables 无法重新初始化或需要插件

algorithm - shell排序的最快间隙序列?

javascript - 如何在 jQuery 中构建多维数组

c++ - 静态声明二维数组 C++ 作为类的数据成员

php - curl 错误 (35) : error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name