如何订购这个棘手的PHP关联数组?

时间:2012-08-04 02:16:39

标签: php arrays associative-array sorting

如何订购这个棘手的PHP关联数组?

我有这个关联数组:

Array (
    [4] => 3
    [2] => 4
    [3] => 1
    [6] => 1
    [1] => 1
)

我需要通过具有最高值的键来订购它,但我还需要按原始顺序保持键具有相同的值,因此它需要出现:

Array (
    [2] => 4
    [4] => 3
    [3] => 1
    [6] => 1
    [1] => 1
    )

我不能使用arsort(),因为它根据键的数字顺序重新排列具有相同值的键,我真的在这里不知所措!有什么建议吗?

1 个答案:

答案 0 :(得分:4)

natsort拯救:

$blub = array(4 => 3, 2 => 4, 3 => 1, 6 => 1, 1 => 1);
natsort($blub);
$blub = array_reverse($blub, true);

var_dump($blub);

这将始终输出:

array(5) { [2]=> int(4) [4]=> int(3) [3]=> int(1) [6]=> int(1) [1]=> int(1) }

natsort似乎使用了一种不同的排序算法,当值与asort相反时,幸运地保留了顺序。但请注意,由于这个原因,natsort 可能比其他传统的排序函数稍慢。