php - 需要合并具有相同键值对的单个数组元素
问题描述
我有一个关联数组,我需要合并具有相同日期的相应键 => 值对
Array
(
[0] => Array
(
[CreatedDate] => 2019-03-20
[Whreceived] => 1
)
[1] => Array
(
[CreatedDate] => 2019-02-24
[Whreceived] => 1
)
[2] => Array
(
[CreatedDate] => 2019-03-21
[Whreceived] => 1
)
[3] => Array
(
[CreatedDate] => 2019-03-20
[InProcess] => 1
)
[4] => Array
(
[CreatedDate] => 2019-03-19
[InProcess] => 1
)
[5] => Array
(
[CreatedDate] => 2019-03-25
[OnHold] => 2
)
[6] => Array
(
[CreatedDate] => 2019-03-19
[WhInwardDone] => 1
)
)
预期产出
Array
(
[0] => Array
(
[CreatedDate] => 2019-03-20
[Whreceived] => 1
[InProcess] => 1
)
[1] => Array
(
[CreatedDate] => 2019-02-24
[Whreceived] => 1
)
[2] => Array
(
[CreatedDate] => 2019-03-21
[Whreceived] => 1
)
[4] => Array
(
[CreatedDate] => 2019-03-19
[InProcess] => 1
[WhInwardDone] => 1
)
[5] => Array
(
[CreatedDate] => 2019-03-25
[OnHold] => 2
)
)
基本上我需要具有唯一日期及其所有对应值的单个数组
解决方案
您可以使用 来执行此操作array_reduce
,检查新数组中是否存在日期,如果存在,则将当前值与该值合并,否则在新数组中创建一个新值。
$merged_array = array_reduce($array, function ($c, $v) {
if (($k = array_search($v['CreatedDate'], array_column($c, 'CreatedDate'))) !== false) {
$c[$k] = array_merge($c[$k], $v);
}
else {
$c[] = $v;
}
return $c;
}, array());
print_r($merged_array);
或者你可以使用一个简单的 foreach 循环:-)
$merged_array = array();
foreach ($array as $v) {
if (($k = array_search($v['CreatedDate'], array_column($merged_array, 'CreatedDate'))) !== false) {
$merged_array[$k] = array_merge($merged_array[$k], $v);
}
else {
$merged_array[] = $v;
}
}
输出:
Array
(
[0] => Array
(
[CreatedDate] => 2019-03-20
[Whreceived] => 1
[InProcess] => 1
)
[1] => Array
(
[CreatedDate] => 2019-02-24
[Whreceived] => 1
)
[2] => Array
(
[CreatedDate] => 2019-03-21
[Whreceived] => 1
)
[4] => Array
(
[CreatedDate] => 2019-03-19
[InProcess] => 1
[WhInwardDone] => 1
)
[5] => Array
(
[CreatedDate] => 2019-03-25
[OnHold] => 2
)
)
推荐阅读
- arrays - In mongo db, how can I set a value in an array of arrays without knowing the index?
- python - Groupby, transpose each group and multiply by the original group in pandas dataframes
- laravel - Laravel + Vue.js 广播回声连接属性未定义
- django - 如何从 django 表单计算数据的平均值并将其存储在变量中以备后用?
- apache - Solr search with query string @ returns all the records
- asp.net-mvc - ASP.NET MVC & EF 6 - 转换为存储过程
- python - optimization a linear objective function with linear constraints and binary variables in python
- jquery - 如何将选择框放在 jquery 数据表内的列中?
- javascript - How to set focus on next input when the button "Enter" is pressed? (javascript)
- clojure - Why does my clojure REPL output gibberish?