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
                )

        )

)