我在PHP中有一个带数组的数组数组,我想根据每个元素中的一个字段对数组的顶层进行排序,我还想根据数组的元素对每个元素中的数组进行排序那个元素。 (见例)。我想要它,以便最后,$data
首先具有'primary'
值为'first'然后'second'的项目。我也想要它,以便在'first'和'second'之内,字段'secondary'
下的数组首先包含'val'
'foo'然后'bar'的项目(对于'first'而言和'第二')
$data = array (
array (
'myid' => 4,
'primary' => 'second',
'secondary' => array (
array (
'myid' => 10,
'val' => 'bar',
),
array (
'myid' => 8,
'val' => 'foo',
),
),
),
array (
'myid' => 2,
'primary' => 'first',
'secondary' => array (
array (
'myid' => 10,
'val' => 'bar',
),
array (
'myid' => 8,
'val' => 'foo',
),
),
),
);
function mysort($a, $b) {
return $a['myid'] > $b['myid'];
}
echo "pre sort:\n";
print_r($data);
usort($data, 'mysort');
echo "post top level sort:\n";
print_r($data);
foreach ($data as $k=>$item) {
usort($item['secondary'], 'mysort');
echo "Second Level Item sort:\n";
print_r($item['secondary']);
}
echo "post second level sort:\n";
print_r($data);
为什么我得到以下最终输出?
post second level sort:
Array
(
[0] => Array
(
[myid] => 2
[primary] => first
[secondary] => Array
(
[0] => Array
(
[myid] => 10
[val] => bar
)
[1] => Array
(
[myid] => 8
[val] => foo
)
)
)
[1] => Array
(
[myid] => 4
[primary] => second
[secondary] => Array
(
[0] => Array
(
[myid] => 10
[val] => bar
)
[1] => Array
(
[myid] => 8
[val] => foo
)
)
)
)
顺便说一句,我使用的是PHP 5.2.17。
答案 0 :(得分:0)
试试这个
foreach ($data as $k=>&$item) {
usort($item['secondary'], 'mysort');
echo "Second Level Item sort:\n";
print_r($item['secondary']);
}
为什么会这样?
因为默认情况下foreach
会复制其中的所有变量
因此,如果您更改foreach
中的变量,则只更改局部变量,并且在foreach
结束后,变量将与foreach
之前的变量相同
当您添加&
- 而不是foreach
时,不会复制变量,并通过引用使用它