php - php根据匹配的列名合并数组
问题描述
我有一个这样的数组数组:
$data = array (
'data1' => array (
0 =>
array (
0 => 'ID',
1 => 'PinCode',
2 => 'Date',
),
1 =>
array (
0 => '101',
1 => '454075',
2 => '2012-03-03',
),
2 =>
array (
0 => '103',
1 => '786075',
2 => '2012-09-05',
),
),
'data2' => array (
0 =>
array (
0 => 'Balance',
1 => 'ID',
),
1 =>
array (
0 => '4533',
1 => '101',
)
),
'data3' => array (
0 =>
array (
0 => 'Active',
1 => 'ID',
),
1 =>
array (
0 => 'Yes',
1 => '101',
),
2 =>
array (
0 => 'No',
1 => '103',
)
),
);
在 $data 数组中有三个数组,分别命名为 data1、data2 和 data3。在每个数组中,第一行是列的名称,其余行是这些列的值(把它想象成一个表)。在每个 data1、data2 和 data3 中,第一行包含一个名为 ID 的列。
我想根据匹配的 ID 字段检查所有三个数组,以便最终输出数组如下所示:
期望的输出:
$output =
array (
'output' =>
array (
0 =>
array (
0 => 'ID',
1 => 'PinCode',
2 => 'Date',
3 => 'Balance',
4 => 'Active',
),
1 =>
array (
0 => '101',
1 => '454075',
2 => '2012-03-03',
3 => '4533',
4 => 'Yes',
),
2 =>
array (
0 => '103',
1 => '786075',
2 => '2012-09-05',
3 => 'null',
4 => 'No',
),
)
);
我试过的(只是尝试结合data1和data2):
$d1=$data['data1'];
$d2=$data['data2'];
if(count($d1)>count($d2))
{
$arr1=array();
$arr2=array();
$arr3=array();
$column1=$d1[0];
$column2=$d2[0];
for($i=1;$i<=(count($d1)-1);$i++)
{
if($i<count($d2))
$arr2[]=array_combine($column2,$d2[$i]);
else
$arr2[]=array_combine($column2,array('0'=>'','1'=>''));
}
for($i=1;$i<=(count($d1)-1);$i++)
{
$arr1[]=array_combine($column1,$d1[$i]);
}
for($i=0;$i<=(count($arr1)-1);$i++)
{
$arr3[]=array_merge($arr1[$i],$arr2[$i]);
}
print_r($arr3);
}
我需要有关合并任意数量数组的简洁代码的帮助。如何获得我上面提到的输出?
解决方案
将键作为数组的第一个元素并不是一个好习惯——这就是为什么要使用键。
我推荐不同的方法 - 使用array-combine连接它们并使用 ID 作为键:
foreach($data as $v) {
$keys = array_shift($v); // take the keys
foreach($v as &$e) {
$e = array_combine($keys, $e); // combine the keys and the value
// add or append them according the ID
if (!isset($res[$e['ID']])) $res[$e['ID']] = $e;
else $res[$e['ID']] = array_merge($res[$e['ID']], $e);
}
}
现在你可以接受这个——如果你必须把它转换回你的结构。
现场示例:3v4l
推荐阅读
- sql-server - DSQL 语法 ETL 脚本
- powershell - 如何使用从 DNS 文件加载的 powershell 创建新的 Microsoft DNS 区域?
- jinja2 - 如何在 Jinja2 模板中为变量指定列?
- python - 仅在函数中使用合并时才出现熊猫键错误
- reactjs - geojson-vt 与 react-leaflet
- xml - 按条件分组并获取分组 XSLT 的项目数
- blazor - 已达到 Blazor SignalR 20K 最大消息
- c++ - 容器中不同对象的成员之间的指针差异是否相同?
- bootstrap-4 - 如何在 Gatsby 和 React Bootstrap 中使用无序列表链接呈现导航?
- r - 在 ggplot2 中绘制回归线拟合的问题(忽略未知参数:方法)