【发布时间】:2019-06-12 09:58:03
【问题描述】:
我有两个这样的数组:
数组1
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
Array
(
[0] => Array
(
[Amount] => 1234
[ID] => 101
)
[1] => Array
(
[Amount] => 1342
[ID] => 103
)
[2] => Array
(
[Amount] => 0
[ID] => 0
)
)
我使用此代码根据 ID 索引的匹配值将它们组合起来。
$combined = array();
foreach ($arr as $arrs) {
$comb = array('ID' => $arrs['ID'], 'Code' => $arrs['Code'],'Date' => $arrs['Date'],'Amount' => '');
foreach ($arr4 as $arr2) {
if ($arr2['ID'] == $arrs['ID']) {
$comb['Amount'] = $arr2['Amount'];
break;
}
else {
$comb['Amount'] = $arr2['Amount'];
}
}
$combined[] = $comb;
}
echo print_r($combined);
这是我从这段代码中得到的期望输出:
Array
(
[0] => Array
(
[ID] => 101
[Code] => 1075
[Date] => 2012-03-03 17:13:12.433
[Amount] => 1234
)
[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
)
)
我想优化代码使得
$comb = array('ID' => $arrs['ID'], 'Code' => $arrs['Code'],'Date' => $arrs['Date'],'Amount' => '');
应该动态生成而不是硬编码。
而不是$comb['Amount'] = $arr2['Amount'];,我希望代码自动将所有其他字段添加到ID匹配的第一个数组中。
我如何做到这一点?
【问题讨论】:
-
是否保证两个数组的元素数量相同,并且每个数组在另一个数组中都有一个匹配的 id?
-
@man0v 是的,两个数组都将具有相同数量的元素。但是每个数组可能没有匹配的 id,因为在数组 2 中没有 ID 109 的条目。我已经发布了我在问题中得到的输出。
-
建议在另一个数组中缺少 id 时该怎么做。我们会忽略这些吗?还是我们将它们添加为单个 id?
-
在这种情况下,请参阅输出的这一部分 [2] => Array ([ID] => 109 [Code] => 178 [Date] => 2012-07-05 20:30: 02.217 [Amount] => 0) 为 Array1 的 ID 添加数量 0
-
@AlivetoDie 不,两个数组中的元素可能没有相同的索引