我想弄清楚为什么我的代码不会像我期望的那样工作。我有一个数组:
$persons = array(
0 => array(
'person' => 'John',
'children' => array('Eve', 'Mark', 'Alto')
),
1 => array(
'person' => 'Susy',
'children' => array('Ruby', 'Adam', 'Tõnu')
)
);
循环数组并按字母顺序对子项进行排序
foreach( $persons as $person ) {
usort($person['children'], function( $a, $b ) {
return strcmp( $a, $b );
});
var_dump($person['children']); //shows children array items alphabetically ordered
}
但是,在foreach chidrens仍处于起步阶段之后
var_dump($persons); //shows that children names are not ordered alphabetically
感谢您的时间
答案 0 :(得分:0)
foreach
循环正在创建实际上是循环内数组值的副本。副本已排序但不会更改原始数组。为此,您可以使用&
:
foreach ($persons as &$person) {
在每次迭代中,当前元素的值被赋值为$ value,内部数组指针被提前一个......为了能够直接修改循环内的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。
直接引用数组的另一种方法是迭代索引并引用元素:
for ($i = 0; $i < count($persons); $i++) {
usort($persons[$i]['children']), function($a, $b) {
return strcmp($a, $b);
});
}