How do I sort the following array?

2020-02-02 03:37发布

问题:

I have this array:

  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
    ) 
)

I want to sort this array in descending order of avgRate so that the array index will be like this:

2 0 3  1

any idea how can this be done?

回答1:

Try this : Using 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);

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



回答2:

Use the SET class in cake

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


回答3:

Take a look at usort function.

Just define a function (in the manual as "cmp") for sorting and use it as callback:

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

and then call it

usort($my_array_variable,"my_sorting_function");