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

sha*_*hat 2 php sorting multidimensional-array

我有一个2D数组,如下所示:

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

外部数组的键值是数字,但不是从0开始,而不是顺序的.我想通过升序键对外部数组进行排序,并通过升序值对内部数组进行排序,因此我尝试这样做:

ksort($arr);
foreach ($arr as $a) {
    sort($a);
}
var_dump($arr);
Run Code Online (Sandbox Code Playgroud)

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

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)
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我怎样才能实现我的目标?我认为这与嵌套数组有关,因为以下按预期工作:

$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)
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 11

foreach迭代数组的副本.如果要修改实际值,则必须引用它们:

//               v
foreach ($arr as &$a) {
    sort($a);
}
unset($a);
Run Code Online (Sandbox Code Playgroud)

文档:

从PHP 5开始,您可以通过在$前加上$来轻松修改数组的元素.这将分配引用而不是复制值.