laravel - Laravel Collection sortBy函数的问题
问题描述
我正在尝试对集合执行多个 sortBy 并且似乎无法正常工作:
$myCollection = collect([
['foo' => 3, 'bar' => null, 'active' => 1],
['foo' => 2, 'bar' => null, 'active' => 1],
['foo' => 1, 'bar' => 1, 'active' => 1],
])->sortBy('foo')->sortBy('bar')->sortBy('active');
结果:
Illuminate\Support\Collection {#417 ▼
#items: array:3 [▼
0 => array:3 [▼
"foo" => 3
"bar" => null
"active" => 1
]
1 => array:3 [▼
"foo" => 2
"bar" => null
"active" => 1
]
2 => array:3 [▼
"foo" => 1
"bar" => 1
"active" => 1
]
]
}
首先按活动正确排序(它们都相同= 1)
然后按“bar”正确排序(null < 1)
然后 sortBy('foo') 失败,因为 (2<3),但在 2 之前首先显示 3... 预期结果:
Illuminate\Support\Collection {#417 ▼
#items: array:3 [▼
0 => array:3 [▼
"foo" => 2
"bar" => null
"active" => 1
]
1 => array:3 [▼
"foo" => 3
"bar" => null
"active" => 1
]
2 => array:3 [▼
"foo" => 1
"bar" => 1
"active" => 1
]
]
}
这是我为演示所做的示例。在我的真实场景中,我使用 Collection::macro 和自定义函数回调来比较日期......但即使在这个简单的例子中,事情看起来也不起作用。
解决方案
您正在链接三个不同的排序,在这种情况下,您可以确定只有最后应用的排序已正确完成。
所以尝试传递排序操作数组:
$myCollection = collect(...)->sortBy([
['foo', 'asc'],
['bar', 'asc'],
['active', 'asc'],
]);
您可以在文档中找到更多信息。
推荐阅读
- python - 使用 EONIA 曲线进行贴现和 6M EURIBOR 远期曲线进行定价计算 Python 中 IR 掉期的潜在未来风险敞口
- node.js - PDFMake 无法通过发送二进制文件打开 pdf 文件
- c# - 如何找到我在使用 WPF 时按下“DELETE”键的 Datagrid 行的值
- python - 如何匹配'word=AB|word=C|word=DE word=E|word=F G'形式的字符串?
- python - Pandas 将一列长度不等的列表拆分为多个布尔列
- c# - 在这种情况下,上下文切换是否会成为 Lock 语句的问题?
- python - 如何在 Flaks wtform DecimalField 上设置 use_locale?
- linq - 如何计算不同的
- dialogflow-es - 当我部署到谷歌助手时,Dialogflow 谷歌助手集成崩溃
- python - 正则表达式:如果之前找到其他文本,则不匹配