0

我有一个数组,它按添加日期对数据进行排序。我想按价格从高到低排序,现在信息显示是这样的:

['name' => 'Simple1', 'price' => 0.20],
['name' => 'Simple2', 'price' => 0.25],
['name' => 'Simple3', 'price' => 0.10],
['name' => 'Simple4', 'price' => 0.23],
['name' => 'Simple5', 'price' => 0.35],
['name' => 'Simple6', 'price' => 0.28],

我需要这样的排序:

['name' => 'Simple5', 'price' => 0.35],
['name' => 'Simple6', 'price' => 0.28],
['name' => 'Simple2', 'price' => 0.25],
['name' => 'Simple4', 'price' => 0.23],
['name' => 'Simple1', 'price' => 0.20],
['name' => 'Simple3', 'price' => 0.10],

在 laravel 我尝试制作:collect($items)->sortBy('price')->values()但这无济于事。

如何按价格从高到低排序?

4

1 回答 1

2

正如@anyber 所建议的那样。你可以使用 Laravel 收集助手sortByDesc

$sorted = collect($items)->sortByDesc('price');

// To remove the key preservation, you can simply loop through and assign it to different array.
$final  = [];
foreach($sorted->values()->all() as $data){
  $final[] = $data;
}
// Now use $final to send back to frontend

现在,如果您想使用纯 php,仍然有多种选择。其中之一是usort

function sortDesc($item1, $item2)
{
    if ($item1['price'] == $item2['price']) return 0;
    return ($item1['price'] < $item2['price']) ? 1 : -1;
}

usort($items, 'sortDesc');
print_r($items);

考虑到您的情况(应对作为 json 传递的数据进行排序,但 laravel 集合助手保留键)我建议您使用usort.

注意:此函数将新键分配给数组中的元素。它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥。

于 2021-04-23T19:07:04.587 回答