如何对Laravel Collection按值而非按键排序?
如何在Laravel中对Collection按值排序
嘿,这个需求很常见!针对你手里的这个键值对集合,Laravel提供了几个非常直观的方法来实现按值(而非键)排序,不管是升序还是降序都能轻松搞定,下面给你一步步拆解:
1. 升序排序(从小到大)
用sortBy()方法,你只需要传入一个闭包,返回每个元素的值即可。因为我们要按值排序,所以闭包直接返回$value就好:
// 假设你的集合变量是$collection $sortedAsc = $collection->sortBy(function ($value, $key) { return $value; }); // 更简洁的箭头函数写法(PHP 7.4+支持) $sortedAsc = $collection->sortBy(fn($value) => $value);
执行后,你会得到按值升序排列的集合,原键会被保留:
结果:
['cookking vuurschaal palma' => 1, 'pizza' => 2]
如果不需要保留原键,想把键重置为连续的数字索引,只需要链式调用values():
$sortedAscWithNewKeys = $collection->sortBy(fn($value) => $value)->values();
2. 降序排序(从大到小)
如果要按值从高到低排序,用sortByDesc()方法就好,用法和sortBy()完全一致:
$sortedDesc = $collection->sortByDesc(fn($value) => $value);
执行后的结果会是:
结果:
['pizza' => 2, 'cookking vuurschaal palma' => 1]
同样,需要重置键的话,加上->values()就行。
额外小技巧:用sort()快速排序
还有一个更简洁的方法sort(),它默认按值升序排序,不过会直接重置键:
// 升序 $sorted = $collection->sort(); // 降序的话,传入SORT_DESC参数 $sortedDesc = $collection->sort(SORT_DESC);
这个方法适合不需要保留原键的场景,代码更短。
内容的提问来源于stack exchange,提问作者Thomas Wijnands
相关产品推荐
相关产品推荐

