在PHP中,为第二个数组中的每个匹配ID向第一个数组添加值
我有两个这样的阵列: 阵列1在PHP中,为第二个数组中的每个匹配ID向第一个数组添加值,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有两个这样的阵列: 阵列1 $array1 = Array ( 0 => Array ( 'ID' => 101, 'Code' => 1075, 'Date' => '2012-03-03 17:13:12.433' ), 1 => Array ( 'ID' => 103,
$array1 = Array
(
0 => Array
(
'ID' => 101,
'Code' => 1075,
'Date' => '2012-03-03 17:13:12.433'
),
1 => Array
(
'ID' => 103,
'Code' => 175,
'Date' => '2012-09-05 20:30:02.217'
),
2 => Array
(
'ID' => 109,
'Code' => 178,
'Date' => '2012-07-05 20:30:02.217'
)
);
阵列2
$array2 = Array
(
0 => Array
(
'Amount' => 1234,
'ID' => 101
),
1 => Array
(
'Amount' => 5656,
'ID' => 101
),
2 => Array
(
'Amount' => 1342,
'ID' => 103
),
3 => Array
(
'Amount' => 0,
'ID' => 0
)
);
我使用下面的代码在两个数组上执行联接:
$arr2 = array_column($array2, "ID");
$finalArray = array();
foreach($array1 as $arr){
$key = array_search($arr['ID'], $arr2);
if($key ===false){
$key = array_search(0, $arr2);
}
unset($array2[$key]['ID']);
$finalArray[] = array_merge($arr,$array2[$key]);
}
print_r($finalArray);
使用上述代码的电流输出为:
finalArray
Array
(
[0] => Array
(
[ID] => 101
[Code] => 1075
[Date] => 2012-03-03 17:13:12.433
[Amount] => 1234 //considers only the first entry of ID 101
)
[1] => Array
(
[ID] => 103
[Code] => 175
[Date] => 2012-09-05 20:30:02.217
[Amount] => 1342
)
[2] => Array
(
[ID] => 109
[Code] => 178
[Date] => 2012-07-05 20:30:02.217
[Amount] => 0
)
)
但是由于在array2中,ID 101有两个条目,但是上面的代码只对匹配ID进行第一次匹配。
预期产出为:
所需输出
Array
(
[0] => Array
(
[ID] => 101
[Code] => 1075
[Date] => 2012-03-03 17:13:12.433
[Amount] => 1234 //amount for first entry of ID 101
)
[1] => Array
(
[ID] => 101
[Code] => 1075
[Date] => 2012-03-03 17:13:12.433
[Amount] => 5656//amount for second entry of ID 101
)
[2] => Array
(
[ID] => 103
[Code] => 175
[Date] => 2012-09-05 20:30:02.217
[Amount] => 1342
)
[3] => Array
(
[ID] => 109
[Code] => 178
[Date] => 2012-07-05 20:30:02.217
[Amount] => 0
)
)
我不知道该使用什么循环。
代码应该为array2的每个匹配ID添加行。
如何修改当前代码,使其提供所需的输出?使结果数组成为由ID键控的关联数组。您可以将第一个数组的元素复制到结果中,然后添加第二个数组中的金额
$finalResult = [];
foreach ($array1 as $arr) {
$finalResult[$arr['ID']] = $arr;
}
foreach ($array2 as $row) {
$id = $row['ID'];
unset($row['ID']);
foreach ($row as $col => $value) {
if (empty($finalResult[$id][$col])) {
$finalResult[$id][$col] = $value;
} else {
$finalResult[$id][$col] += $value;
}
}
}
将结果数组设置为ID键控的关联数组。可以将第一个数组的元素复制到结果中,然后添加第二个数组中的金额
$finalResult = [];
foreach ($array1 as $arr) {
$finalResult[$arr['ID']] = $arr;
}
foreach ($array2 as $row) {
$id = $row['ID'];
unset($row['ID']);
foreach ($row as $col => $value) {
if (empty($finalResult[$id][$col])) {
$finalResult[$id][$col] = $value;
} else {
$finalResult[$id][$col] += $value;
}
}
}
$arr2=array\u列($array2,“ID”);
$finalArray=array();
foreach($array1作为$arr){
//获取array2.中存在的ID的索引,并存储在搜索变量中。
$search=array_key($arr2,$arr['ID']);
如果(!$search){
//如果ID未在array-2中退出,则获取该ID的索引并存储在搜索变量中。
$key=数组搜索(0,$arr2);
$search[0]=$key;
未设置($array2[$key]['ID']);
}
//获取搜索项并合并。
foreach($value搜索){
$finalArray[]=数组合并($arr,$array2[$value]);
}
}
回声“;
打印费($finalArray);
$arr2=array\u列($array2,“ID”);
$finalArray=array();
foreach($array1作为$arr){
//获取array2.中存在的ID的索引,并存储在搜索变量中。
$search=array_key($arr2,$arr['ID']);
如果(!$search){
//如果ID未在array-2中退出,则获取该ID的索引并存储在搜索变量中。
$key=数组搜索(0,$arr2);
$search[0]=$key;
未设置($array2[$key]['ID']);
}
//获取搜索项并合并。
foreach($value搜索){
$finalArray[]=数组合并($arr,$array2[$value]);
}
}
回声“;
打印费($finalArray);
我不想键入列名,因为可以有任意数量的列。我传递ID只有其他列被动态添加我已经更新了ID,以循环遍历$array2
中的所有列并将它们全部添加。我不想键入列名,因为可以有任意数量的列。我传递ID只有其他列被动态添加我已经更新了它,在$array2
中循环所有列并将它们全部添加起来。是的,我会尝试是的,我会尝试