我有一个二维数组,如下所示:
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/