1

我有一个循环将两个值的数组添加到主数组。

如何合并主数组中具有相同第一个值的所有数组,同时将第二个值相加?

$mainData = array() ;
//Loop...

$cRes = $dbh->query("SELECT overdue FROM _credit_control_overdue WHERE entityID = $entityId") ;
        $currentOwed = $cRes->fetchColumn() ;
        $dbh->exec("REPLACE INTO _credit_control_overdue (entityID, overdue) VALUES ('$entityId', '$remaining')") ;
        $totalRemaining += $remaining ;

        array_push($mainData, array($entityId, $remaining)) ;
//End of loop

在许多情况下,$entityId 将是相同的,而 $remaining 将是不同的。

现在我需要一个类似于array_unique 的函数,它会给我一个唯一的$entityId,但所有的$remaining 值都加起来,所以我只剩下例如2339、83572.60。

希望我已经解释清楚了!


这是我想要的输出:

数组 ( [0] => 数组 ( [0] => 2499 [1] => 5314.50 ) [1] => 数组 ( [0] => 639 [1] => 75.00 ))

即数组([0] => UNIQUEID [1] => SUM)

4

1 回答 1

0

最好的方法可能是首先使用 $entityId 作为键(这将为您提供每个条目的唯一条目)和 $remaining 的累积总数作为值来构建关联数组(哈希):

// Initialise the hash before looping
$perEntityTotals = array();

/* Loop ... */

// Add the $remaining value to the appropriate entity's total
// If the key doesn't yet exist, it will be created with the value $remaining
$perEntityTotals[$entityId] += $remaining;

/* End Loop */

要按照您最初的要求重新格式化,您需要操作哈希:

$mainData = array();
foreach ( $perEntityTotals as $entityId => $total )
{
    $mainData[] = array($entityId, $total);
}

以下是等效的,但有点难以阅读:

$mainData = array_map(
    NULL,             // see Example #4 on http://php.net/array_merge
    array_keys($perEntityTotals),
    array_values($perEntityTotals) 
);
于 2012-07-18T23:23:31.127 回答