我有两个数组
$companyA[] = array ("QuantityOnOrder" => $quantityOnOrder, "QuantityOnHand" => $quantityOnHand, "Name" => $name);
$companyB[] = array ("QuantityOnOrder" => $quantityOnOrder, "QuantityOnHand" => $quantityOnHand, "Name" => $name);
这些是多维数组。假设公司 A 有 3 条记录,公司 B 有 10 条记录。让我们进一步假设公司 A 中的 1 条记录与公司 B 中的记录共享相同的“名称”属性。如果这是真的,那么我想从每个数组中获取 quantityOnOrder 和 quantityOnHand 并将它们的值相加并将它们存储在一个新数组中。
然后我还想确保这个新数组也具有来自两个数组的所有唯一值。这是数组可能看起来像什么以及我希望最终结果看起来像什么的示例。
A 公司:
Array (
[0] => Array ([QuantityOnHand] => 10 [QuantityOnOrder] => 20 [Name] => LOR1)
[1] => Array ([QuantityOnHand] => 5 [QuantityOnOrder] => 6 [Name] => D23-72-P)
[2] => Array ([QuantityOnHand] => 2331 [QuantityOnOrder] => 0 [Name] => RB)
[3] => Array ([QuantityOnHand] => 3520 [QuantityOnOrder] => 0 [Name] => RTOP))
B 公司:
Array (
[0] => Array ([QuantityOnHand] => 11 [QuantityOnOrder] => 13 [Name] => RPEN)
[1] => Array ([QuantityOnHand] => 5 [QuantityOnOrder] => 6 [Name] => D23-72-P)
[2] => Array ([QuantityOnHand] => 23 [QuantityOnOrder] => 0 [Name] => RAT)
[3] => Array ([QuantityOnHand] => 320 [QuantityOnOrder] => 0 [Name] => RBOT))
组合数组:
Array (
[0] => Array ([QuantityOnHand] => 10 [QuantityOnOrder] => 20 [Name] => LOR1)
[1] => Array ([QuantityOnHand] => 10 [QuantityOnOrder] => 12 [Name] => D23-72-P)
[2] => Array ([QuantityOnHand] => 2331 [QuantityOnOrder] => 0 [Name] => RB)
[3] => Array ([QuantityOnHand] => 3520 [QuantityOnOrder] => 0 [Name] => RTOP))
[4] => Array ([QuantityOnHand] => 11 [QuantityOnOrder] => 13 [Name] => RPEN)
[5] => Array ([QuantityOnHand] => 23 [QuantityOnOrder] => 0 [Name] => RAT)
[6] => Array ([QuantityOnHand] => 320 [QuantityOnOrder] => 0 [Name] => RBOT))
请注意,在组合数组中,我如何将 companyA 和 companyB 的所有记录以及共享相同名称的记录组合在一起。希望这对某人来说足够有意义。我想不出最好的方法来实现我在组合数组中寻找的结果。任何帮助将不胜感激。
最佳答案
如果这是一个关联数组,键是名称,值是数组,我认为这可能会更容易。
否则,我会首先索引数组以防止不必要的循环。这是未经测试的,但也许你可以试一试。
$i = 0;
foreach($company_a as $a) {
$idx_a[$a['Name']] = $i++;
}
$i = 0;
foreach($company_a as $b) {
$idx_b[$b['Name']] = $i++;
}
$toMerge = array_filter($company_b, function($value) {
return array_key_exists($value['Name'], $idx_a);
});
$toRemove = array();
foreach($toMerge as $m) {
$i = $idx_a[$m['Name']];
$c = $company_a[$i];
$company_a[$i]['QuantityOnHand'] = $c['QuantityOnHand'] + $m['QuantityOnHand'];
$company_a[$i]['QuantityOnOrder'] = $c['QuantityOnOrder'] + $m['QuantityOnOrder'];
$toRemove[] = $idx_b[$m['Name']];
}
foreach($toRemove as $i) {
unset($company_b[$]);
}
//company_a now has the final result
$company_a = array_merge($company_a, $company_b);
关于PHP for 循环逻辑(有心理障碍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499913/