数组按值降序排序,按索引升序排序

时间:2018-10-06 08:57:56

标签: php arrays sorting

我有一个数组pr($site_name_with_value)看起来像这样。这是两个combine_array的结果。

Array(
    [Ashuganj PDB] => 720
    [Bagherhat PGCB] => 720
    [Banani_CO] => 720
    [Barapukuria PGCB] => 784
    [Barishal PGCB] => 780
    [Benapole_CO] => 752
    [Bogura RO] => 776
    [Bogura_CO(IS)] => 784 
)

我已经尝试过这样做以达到预期的输出。

$site_name_with_value_order = arsort($site_name_with_value); 
foreach ($site_name_with_value_order as $key => $val) {
    echo "$key = $val\n";
}

它返回一条错误消息 为foreach()提供了无效的参数

首先,我想按值descending order对它们进行排序。其次,如果值相同,则按ascending排序索引。

我想要得到这样的输出。但是我不知道如何获得预期的输出。

Array(
    [Bogura_CO(IS)] => 784
    [Barapukuria PGCB] => 784
    [Barishal PGCB] => 780
    [Bogura RO] => 776
    [Benapole_CO] => 752 
    [Ashuganj PDB] => 720
    [Bagherhat PGCB] => 720
    [Banani_CO] => 720   
)

2 个答案:

答案 0 :(得分:1)

首先,您创建了一个带有重复键的数组,这是无效的方法。因此,当您尝试使用arsort()-以相反的顺序对数组进行排序并保持索引关联时,但是对于不同的php版本,它将返回不同的结果。参见DEMO

$array = array(

    'Ash' => 776,
    'Bag' => 720,
    'Ban' => 720,
    'Bar' => 776,
    'Bar' => 780,
    'Ben' => 752,
    'Bog' => 720,
    'Bog' => 780,
    'Bue' => 776,  
);
arsort($array);
print_r($array);

答案 1 :(得分:1)

无需分配

name

在另一个变量中,因为它只会返回1。因此,只需循环

arsort($site_name_with_value); 

相反。