PHP for 循环逻辑(有心理障碍)

标签 php for-loop

我有两个数组

$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/

相关文章:

php - 如何在PHP和mysql数据库中上传和插入多张图片

Python for 循环和 if 语句

javascript - angular - 对数组长度时间进行 HTTP 请求并对数组进行 concat 响应

javascript - JavaScript 函数中的 for 循环

php - MySQL User_ID - 需要帮助

php - 寻找 Jenks 优化——数据分类

php - 使用增量日期和天数插入 PHP 中的 SQL 数据库

php - 过滤器出现问题,不保存数据

JavaScript - 在数组末尾执行函数

java - 每只股票如何输出?