我想使用指定的深子阵列值组合两个数组。
我有两个不同结构的不同数组,我希望将它们组合起来,这样如果“主键”匹配,则将第二个数组的值添加到第一个数组,如果没有,则创建数组2值的数组。
第一个数组中的主键是[created_by]
,第二个数组中的主键是[upgrade_by]
Array1是:
Array(
[0] => Array(
[Customer] => Array(
[created_by] => 5
[amount] => 199
[name] => First Cux
)
)
[1] => Array(
[Customer] => Array(
[created_by] => 1
[amount] => 199
[name] => Last Cux
)
)
)
数组2是
Array(
[0] => Array(
[0] => Array(
[refund_amount] => 100
)
[Historycustomer] => Array(
[upgrade_by] => 1
[company] => First Company
)
)
[1] => Array(
[0] => Array(
[refund_amount] => 250
)
[Historycustomer] => Array(
[upgrade_by] => 3
[company] => Last Company
)
)
)
我需要这样的结果:
Array(
[0] => Array(
[Customer] => Array(
[created_by] => 5
[amount] => 199
[name] => First Cux
)
)
[1] => Array(
[Customer] => Array(
[created_by] => 1
[amount] => 199
[refund_mount]=>100
[name] => Last Cux
[company] => First Company
)
)
[2] => Array(
[Customer] => Array(
[created_by] => 3
[refund_mount]=>250
[company] => Last Company
)
)
)
第一个数组中的主键是[created_by]
,第二个数组中的主键是[upgrade_by]
答案 0 :(得分:1)
我的方法将使用输入数组$a
作为结果数组。 foreach()
将遍历$b
的子数组。 $index
($a
中包含upgrade_by
值created_by
值的子数组的关键字可以通过以下方式找到:
$a
隔离Customer
的{{1}}“列中最深的子数组 - 这些是3元素数组。array_column()
再次用于隔离这些子数组中的array_column()
值。created_by
搜索新隔离数组中的指定数字,如果存在,则返回其索引。找到索引后,使用给定索引将array_search()
的值与$b
的值合并,并省略$a
元素。
如果找不到索引,upgrade_by
将重命名为upgrade_by
,并且这些元素会作为新客户子阵列添加到created_by
。
代码:(Demo Link)
$a
输出:
$a=[
['Customer'=>['created_by'=>5,'amount'=>199,'name'=>'First Cux']],
['Customer'=>['created_by'=>1,'amount'=>199,'name'=>'Last Cux']]
];
$b=[
[['refund_amount'=>100],'Historycustomer'=>['upgrade_by'=>1,'company'=>'First Company']],
[['refund_amount'=>250],'Historycustomer'=>['upgrade_by'=>3,'company'=>'Last Company']]
];
$created_by_indexes=array_column(array_column($a,'Customer'),'created_by');
foreach($b as $b1){
$index=array_search($b1['Historycustomer']['upgrade_by'],$created_by_indexes);
if($index!==false){
$a[$index]['Customer']+=['refund_amount'=>$b1[0]['refund_amount'],'company'=>$b1['Historycustomer']['company']];
}else{
$a[]=['Customer'=>['created_by'=>$b1['Historycustomer']['upgrade_by'],'refund_amount'=>$b1[0]['refund_amount'],'company'=>$b1['Historycustomer']['company']]];
}
}
var_export($a);