【问题标题】:Array sorting by values descending and sort index by ascending in php在php中按值降序排序和按升序排序索引
【发布时间】:2018-10-06 08:57:55
【问题描述】:

我有一个数组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   
)

【问题讨论】:

  • 那些数组无效。您不能多次拥有相同的密钥。键是唯一的。
  • 另外,如in the manual 所述,arsort() 不返回排序后的数组。它返回一个布尔值。它修改原始数组(将其用作参考)。所以你实际上是在向foreach() 传递一个无效的布尔值。
  • 数组键是唯一的。但我使用它的缩写形式。

标签: php arrays sorting


【解决方案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);

【讨论】:

  • 对我的好建议。首先我的数组已经安排在ascending order
【解决方案2】:

没有必要指定

arsort($site_name_with_value); 

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

$site_name_with_value 

改为。

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 2023-03-07
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2012-12-21
    • 2021-01-23
    相关资源
    最近更新 更多