我有一个像这样的二维数组:
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);
来自文档:
从PHP 5开始,您可以通过在$value前面加上&来轻松修改数组的元素。这将分配引用而不是复制值。