是否有人能够指出我正确的方向为什么我不能让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等顺序回响......我似乎无法找到我在这里失踪的东西?
由于
答案 0 :(得分:1)
您的代码是正确的,但在打印时出错。 通过引用索引为$ d [' y'] [' 5'] [' year']的值,结果将始终为2005年。因此, foreach以升序显示年份。请尝试改为:
foreach($d['y'] as $value) {
echo $value['year'];
}
你会发现你的数组的顺序是相反的。
(不要在foreach循环中使用变量$ i)
答案 1 :(得分:0)
echo $value['year'];
而不是
echo $d['y'][$i]['year'];
因为$ i计数器直接调用索引号而不是在循环时使用排序数组。
答案 2 :(得分:0)
由于arsort()维护键关联,因此重新排序的多维数组将使第0个元素为last,并且元素5首先出现。如果变量$ i最初设置为零,则使用foreach循环可能会使代码无法显示反向排序数组。为了避免这种无意的错误以及提高性能和简化代码,可以替换foreach-loop,如下所示:
<?php
function showData($value,$key){
echo "$value\n";
}
array_walk_recursive( $d, 'showData');
array_walk_recursive(),顾名思义,递归遍历一个数组来查找数据。回调允许人们轻松访问和显示值。
请参阅demo
答案 3 :(得分:0)
这是因为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
)
)
)