【问题标题】:How do I sort the following array? [duplicate]如何对以下数组进行排序? [复制]
【发布时间】:2013-02-25 07:43:03
【问题描述】:

我有这个数组:

  Array
(
[0] => Array
    (
        [id] => 6347
        [lat] => 18.520430
        [lng] => 73.856743
        [country_id] => 18
        [description] => pune is vary nice plac!!!!!!!!!!!!<br>
        [loc_badge] => img/icon-monument.png
        [distance] => 0
        [country] => india
        [city] => pune
        [refId] => 6340
        [avgRate] => 4.7
    )

[1] => Array
    (
        [id] => 6587
        [lat] => 18.649632
        [lng] => 73.744843
        [country_id] => 18
        [description] => Ravet is vary nice city near by pune<br>
        [loc_badge] => img/icon-attraction.png
        [distance] => 18.5865663140631
        [country] => india
        [city] => ravet
        [refId] => 6749
        [avgRate] => 0
    )

[2] => Array
    (
        [id] => 6633
        [lat] => 17.691401
        [lng] => 74.000938
        [country_id] => 18
        [description] => satara is vary nice city<br>
        [loc_badge] => img/icon-monument.png
        [distance] => 93.4305849434119
        [country] => india
        [city] => satara
        [refId] => 6834
        [avgRate] => 6
    )

[3] => Array
    (
        [id] => 6213
        [lat] => 18.655491
        [lng] => 72.867920
        [country_id] => 150
        [description] => Alibag  is a coastal town and a municipal council in Raigad District in the Konkan region of Maharashtra, India.
        [loc_badge] => img/icon-beach.png
        [distance] => 105.287803206408
        [country] => maharashtra
        [city] => alibag
        [refId] => 6212
        [avgRate] => 2
    ) 
)

我想按 avgRate 的降序对这个数组进行排序,以便数组索引如下所示:

2 0 3  1

知道怎么做吗?

【问题讨论】:

  • 看看usort - php.net/usort
  • 您是否也希望这些键也按该顺序排列? usort 会对值进行排序,但不会对键进行排序。
  • 我看到这个问题被标记为“已回答”,但是,我想知道;这个数组是从数据库中检索的吗?如果是,也许最好直接在查询中对结果进行排序,而不是事后

标签: php arrays cakephp multidimensional-array


【解决方案1】:

在 cake 中使用 SET

$result = Set::sort($yourArray, '{n}.avgRate', 'desc');

【讨论】:

    【解决方案2】:

    试试这个:使用array_multisort

    $sort = array();
    foreach($your_array as $k=>$v) {
        $sort['avgRate'][$k] = $v['avgRate'];
    }
    
    array_multisort($sort['avgRate'], SORT_DESC, $your_array);
    
    
    echo "<pre>";
    print_r($your_array);
    

    参考:http://php.net/manual/en/function.array-multisort.php

    【讨论】:

      【解决方案3】:

      看看usort函数。

      只需定义一个函数(在手册中为“cmp”)用于排序并将其用作回调:

      function my_sorting_function($a, $b)
      {
          return $a["avgRate"]>$b["avgrate"]?1:-1;
      }
      

      然后调用它

      usort($my_array_variable,"my_sorting_function");
      

      【讨论】:

        猜你喜欢
        • 2011-01-09
        • 1970-01-01
        • 2020-05-18
        • 1970-01-01
        • 2022-01-20
        • 2019-12-11
        • 2016-09-01
        • 1970-01-01
        相关资源
        最近更新 更多