php - 在laravel 6中对具有另一个数组中的值的多维数组进行排序 - php
问题描述
我想用“fee_category”的值对下面的数组进行排序。数组的第一个键是日期,在每个日期内它可能包含多个费用,如第四个和第五个日期(即 [2020-10-15] 和 [2020-10-14])。我只需要一种简单的方法来完成这种排序。我尝试了 usort(),但没有按预期工作。
Array(
[2020-10-19] =>
Array(
[0] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
)
[2020-10-17] =>
Array(
[0] => Array(
[fee_fare] => 630
[fee_category] => Special Fee
)
)
[2020-10-16] =>
Array(
[0] => Array(
[fee_fare] => 800
[fee_category] => Special Fee
)
)
[2020-10-15] =>
Array(
[0] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[1] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[2] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
[3] => Array(
[fee_fare] => 3850
[fee_category] => Tuition Fee
)
[4] => Array(
[fee_fare] => 630
[fee_category] => Special Fee
)
)
[2020-10-14] =>
Array(
[0] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[1] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
[2] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[3] => Array(
[fee_fare] => 1325
[fee_category] => Tuition Fee
)
[4] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[5] => Array([fee_fare] => 800
[fee_category] => Special Fee
)
[6] => Array([fee_fare] => 2700
[fee_category] => Tuition Fee
)
)
)
预期产出
Array(
[2020-10-19] =>
Array(
[0] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
)
[2020-10-17] =>
Array(
[0] => Array(
[fee_fare] => 630
[fee_category] => Special Fee
)
)
[2020-10-16] =>
Array(
[0] => Array(
[fee_fare] => 800
[fee_category] => Special Fee
)
)
[2020-10-15] =>
Array(
[0] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[1] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[4] => Array(
[fee_fare] => 630
[fee_category] => Special Fee
)
[2] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
[3] => Array(
[fee_fare] => 3850
[fee_category] => Tuition Fee
)
)
[2020-10-14] =>
Array(
[0] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[2] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[4] => Array(
[fee_fare] => 550
[fee_category] => Special Fee
)
[5] => Array(
[fee_fare] => 800
[fee_category] => Special Fee
)
[1] => Array(
[fee_fare] => 2650
[fee_category] => Tuition Fee
)
[3] => Array(
[fee_fare] => 1325
[fee_category] => Tuition Fee
)
[6] => Array([fee_fare] => 2700
[fee_category] => Tuition Fee
)
)
)
提前致谢。
解决方案
这是您需要的array_multisort与array_column结合
$arr = [
'2020-10-19' =>
[
0 => [
'fee_fare' => 2650,
'fee_category' => 'Tuition Fee'
]
],
'2020-10-17' =>
[
0 => [
'fee_fare' => 630,
'fee_category' => 'Special Fee'
]
],
'2020-10-16' =>
[
0 => [
'fee_fare' => 800,
'fee_category' => 'Special Fee'
]
],
'2020-10-15' =>
[
0 => [
'fee_fare' => 550,
'fee_category' => 'Special Fee'
],
1 => [
'fee_fare' => 550,
'fee_category' => 'Special Fee'
],
2 => [
'fee_fare' => 2650,
'fee_category' => 'Tuition Fee'
],
3 => [
'fee_fare' => 3850,
'fee_category' => 'Tuition Fee'
],
4 => [
'fee_fare' => 630,
'fee_category' => 'Special Fee'
],
],
'2020-10-14' => [
0 => [
'fee_fare' => 550,
'fee_category' => 'Special Fee'
],
1 => [
'fee_fare' => 2650,
'fee_category' => 'Tuition Fee'
],
2 => [
'fee_fare' => 550,
'fee_category' => 'Special Fee'
],
3 => [
'fee_fare' => 1325,
'fee_category' => 'Tuition Fee'
],
4 => [
'fee_fare' => 550,
'fee_category' => 'Special Fee'
],
5 => [
'fee_fare' => 800,
'fee_category' => 'Special Fee'
],
6 => [
'fee_fare' => 2700,
'fee_category' => 'Tuition Fee'
]
]
];
foreach($arr as $key => $a){
array_multisort(
array_column($a, 'fee_fare'),
SORT_ASC,
$a
);
$arr[$key] = $a;
}
echo "<pre>";
echo "<b>".__FILE__."</b><br/>";
var_dump($arr);
echo "</pre>";
die();
输出是:
array (size=5)
'2020-10-19' =>
array (size=1)
0 =>
array (size=2)
'fee_fare' => int 2650
'fee_category' => string 'Tuition Fee' (length=11)
'2020-10-17' =>
array (size=1)
0 =>
array (size=2)
'fee_fare' => int 630
'fee_category' => string 'Special Fee' (length=11)
'2020-10-16' =>
array (size=1)
0 =>
array (size=2)
'fee_fare' => int 800
'fee_category' => string 'Special Fee' (length=11)
'2020-10-15' =>
array (size=5)
0 =>
array (size=2)
'fee_fare' => int 550
'fee_category' => string 'Special Fee' (length=11)
1 =>
array (size=2)
'fee_fare' => int 550
'fee_category' => string 'Special Fee' (length=11)
2 =>
array (size=2)
'fee_fare' => int 630
'fee_category' => string 'Special Fee' (length=11)
3 =>
array (size=2)
'fee_fare' => int 2650
'fee_category' => string 'Tuition Fee' (length=11)
4 =>
array (size=2)
'fee_fare' => int 3850
'fee_category' => string 'Tuition Fee' (length=11)
'2020-10-14' =>
array (size=7)
0 =>
array (size=2)
'fee_fare' => int 550
'fee_category' => string 'Special Fee' (length=11)
1 =>
array (size=2)
'fee_fare' => int 550
'fee_category' => string 'Special Fee' (length=11)
2 =>
array (size=2)
'fee_fare' => int 550
'fee_category' => string 'Special Fee' (length=11)
3 =>
array (size=2)
'fee_fare' => int 800
'fee_category' => string 'Special Fee' (length=11)
4 =>
array (size=2)
'fee_fare' => int 1325
'fee_category' => string 'Tuition Fee' (length=11)
5 =>
array (size=2)
'fee_fare' => int 2650
'fee_category' => string 'Tuition Fee' (length=11)
6 =>
array (size=2)
'fee_fare' => int 2700
'fee_category' => string 'Tuition Fee' (length=11)
如您所见,我们循环遍历“主”数组,将其拆分为 $key => $value,然后我们通过 'fee_fare' 列的值对子数组使用 array_multisort
推荐阅读
- apache-spark - 火花动作卡在 EOFException
- node.js - 如何在云函数中调用 API?
- html - 如何使用css在div中选择第一个标签?
- mysql - 将 mysql 工作台连接到 GCE mysql
- prolog - 使用 Prolog 查找列表的回文:- Ivan Btrako 的练习 3.5“人工智能的 Prolog 编程”
- php - 为什么我的括号变成了我的打印语句的一部分?
- reactjs - 尝试将颜色用作带有情感(样式)组件的属性,导致打字稿出错
- c# - 为什么create database 数据库语句返回多个值?
- azure-blob-storage - AzureFileCopy 在 blob 中生成应用程序/八位字节流文件
- django - Django DRF | 创建子模型时修改父模型字段