PHP 反向排序关联数组 arsort() 不起作用?
PHP Reverse Sort Associative Array arsort() Not Working?
请问有人能给我指出正确的方向吗,为什么我不能让 arsort() 处理以下问题:
$d=array();
$d['y'][0]['year'] = 2000;
$d['y'][1]['year'] = 2001;
$d['y'][2]['year'] = 2002;
$d['y'][3]['year'] = 2003;
$d['y'][4]['year'] = 2004;
$d['y'][5]['year'] = 2005;
arsort($d['y']);
$i=0
foreach ($d['y'] as $value){
$i++;
echo $d['y'][$i]['year'];
}
它只是按 0、1、2、3、4 等的顺序回显...我似乎找不到我在这里缺少的东西?
谢谢
你的代码是正确的,但是你打印的时候出错了。
通过引用索引为 $d['y']['5']['year'] 的值,结果将始终为 2005。因此,foreach 以升序显示年份。请尝试:
foreach($d['y'] as $value) {
echo $value['year'];
}
你会看到你的数组是倒序的。
(不要在foreach循环中使用变量$i)
Riccardo 给我指出了正确的方向,我发现我需要使用:
echo $value['year'];
而不是
echo $d['y'][$i]['year'];
因为 $i 计数器在循环时直接调用索引号而不是使用排序数组。
由于 arsort() 维护键关联,因此重新排序的多维数组将第 0 个元素最后出现,第 5 个元素首先出现。如果变量 $i 最初设置为零,则使用 foreach 循环可能会使代码容易无法显示反向排序的数组。为了避免这种无意的错误以及提高性能和简化代码,可以替换 foreach 循环,如下所示:
<?php
function showData($value,$key){
echo "$value\n";
}
array_walk_recursive( $d, 'showData');
array_walk_recursive(),顾名思义,递归遍历一个数组来查找数据。回调允许人们轻松访问和显示值。
见demo
这是因为 arsort() 会保留密钥。可以查看手册here.
所以在 arsort() $d 之后就像下面这样,但是你以相反的方式打印,这使得它看起来像没有被排序。检查 live demo.
Array
(
[y] => Array
(
[5] => Array
(
[year] => 2005
)
[4] => Array
(
[year] => 2004
)
[3] => Array
(
[year] => 2003
)
[2] => Array
(
[year] => 2002
)
[1] => Array
(
[year] => 2001
)
[0] => Array
(
[year] => 2000
)
)
)
请问有人能给我指出正确的方向吗,为什么我不能让 arsort() 处理以下问题:
$d=array();
$d['y'][0]['year'] = 2000;
$d['y'][1]['year'] = 2001;
$d['y'][2]['year'] = 2002;
$d['y'][3]['year'] = 2003;
$d['y'][4]['year'] = 2004;
$d['y'][5]['year'] = 2005;
arsort($d['y']);
$i=0
foreach ($d['y'] as $value){
$i++;
echo $d['y'][$i]['year'];
}
它只是按 0、1、2、3、4 等的顺序回显...我似乎找不到我在这里缺少的东西?
谢谢
你的代码是正确的,但是你打印的时候出错了。 通过引用索引为 $d['y']['5']['year'] 的值,结果将始终为 2005。因此,foreach 以升序显示年份。请尝试:
foreach($d['y'] as $value) {
echo $value['year'];
}
你会看到你的数组是倒序的。
(不要在foreach循环中使用变量$i)
Riccardo 给我指出了正确的方向,我发现我需要使用:
echo $value['year'];
而不是
echo $d['y'][$i]['year'];
因为 $i 计数器在循环时直接调用索引号而不是使用排序数组。
由于 arsort() 维护键关联,因此重新排序的多维数组将第 0 个元素最后出现,第 5 个元素首先出现。如果变量 $i 最初设置为零,则使用 foreach 循环可能会使代码容易无法显示反向排序的数组。为了避免这种无意的错误以及提高性能和简化代码,可以替换 foreach 循环,如下所示:
<?php
function showData($value,$key){
echo "$value\n";
}
array_walk_recursive( $d, 'showData');
array_walk_recursive(),顾名思义,递归遍历一个数组来查找数据。回调允许人们轻松访问和显示值。
见demo
这是因为 arsort() 会保留密钥。可以查看手册here.
所以在 arsort() $d 之后就像下面这样,但是你以相反的方式打印,这使得它看起来像没有被排序。检查 live demo.
Array
(
[y] => Array
(
[5] => Array
(
[year] => 2005
)
[4] => Array
(
[year] => 2004
)
[3] => Array
(
[year] => 2003
)
[2] => Array
(
[year] => 2002
)
[1] => Array
(
[year] => 2001
)
[0] => Array
(
[year] => 2000
)
)
)