[英]Laravel Collections :multidimensional array, Group by keys and unique values
[英]group unique values in multidimensional array
我有一系列的 RestroreModels
如果 RestoreCode 值在数组中多次存在。 基于唯一的恢复,我想添加 TotalCharge 值并将与该 RestoreCode 关联的模型放在一个新数组中。 如果 RestoreCode 值仅存在一次,则将其与数组中的单个模型原样放置。
$RestroreModels = array (
0 =>
array (
'TotalCharge' => '3',
'RestoreCode' => 'FF 0',
'Model' => 'iPhone 7',
),
1 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'LT 2015',
'Model' => 'iPad Mini 2',
),
2 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'LT 4013',
'Model' => 'iPhone 6',
),
3 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'LT 4013',
'Model' => 'ipod touch',
),
4 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'P 21',
'Model' => 'iPhone 7',
),
5 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'AL 2015',
'Model' => 'iPhone 7',
),
6 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'AL 0',
'Model' => 'ipod touch',
),
7 =>
array (
'TotalCharge' => '1',
'RestoreCode' => 'LT 2015',
'Model' => 'iPad Mini',
),
8 =>
array (
'TotalCharge' => '1',
'RestoreCode' => 'LT 4005',
'Model' => 'iPad Mini',
),
9 =>
array (
'TotalCharge' => '1',
'RestoreCode' => 'P 21',
'Model' => 'iPad 5',
),
10 =>
array (
'TotalCharge' => '1',
'RestoreCode' => 'LT 4013',
'Model' => 'iPhone 7+',
)
);
我想要这样的结果
$RestroreModels = array (
0 =>
array (
'TotalCharge' => '4',
'RestoreCode' => 'LT 2015',
'Model' => array ('iPad Mini 2', 'iPhone 7')
),
1 =>
array (
'TotalCharge' => '3',
'RestoreCode' => 'LT 4013',
'Model' => array ('iPhone 7+', 'ipod touch', 'iPad Mini 2')
),
2 =>
array (
'TotalCharge' => '3',
'RestoreCode' => 'P 21',
'Model' => array ('iPad Mini 2', 'iPhone 7', 'iPad 5')
),
3 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'AL 2015',
'Model' => array ('iPhone 7'),
),
4 =>
array (
'TotalCharge' => '2',
'RestoreCode' => 'AL 0',
'Model' => array ('ipod touch'),
),
5 =>
array (
'TotalCharge' => '1',
'RestoreCode' => 'LT 4005',
'Model' => array ('iPad Mini'),
),
);
到目前为止,我已经尝试过这个我能够获得唯一值,但不确定如何添加添加 TotalCharge 并将与 RestoreCode 相关的模型放入 $final_array 中。
$final_array = array();
$keys_array = array();
foreach ($RestroreModels as $key => $value) {
if (!in_array($value['RestoreCode'], $keys_array)) {
$keys_array[$key] = $value['RestoreCode'];
$final_array[$key] = $value;
}
}
var_dump ($final_array);
die();
请注意, if the RestoreCode value exist only once put as it is with single model in array
,我认为您可能会使用 foreach 循环并将单个数组的RestoreCode
存储为结果数组中的键。 请注意,结果将与您想要的结果不同,因为具有单个 RestoreCode 的项目也将出现在结果中。
每次迭代检查该键是否已存在。 如果没有,则添加它并将模型的值放入新数组中。
如果确实存在,请添加TotalCharge
的值。 要获得唯一值的模型,检查当前阵列Model
已经包含它。
如果要重置键,可以使用array_values 。
$res = [];
foreach ($RestroreModels as $item) {
if (isset($res[$item["RestoreCode"]])) {
if (!in_array($item["Model"], $res[$item["RestoreCode"]]["Model"], true)) {
$res[$item["RestoreCode"]]["Model"][] = $item["Model"];
}
$res[$item["RestoreCode"]]["TotalCharge"] += $item["TotalCharge"];
} else {
$item["Model"] = [$item["Model"]];
$res[$item["RestoreCode"]] = $item;
}
}
print_r(array_values($res));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.