1

2つの値の配列をメイン配列に追加するループがあります。

同じ最初の値を持つメイン配列のすべての配列をマージし、同時に2番目の値を合計するにはどうすればよいですか?

$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が残りますが、残りのすべての値が合計されるため、たとえば2339、83572.60が残ります。

私がこれを明確に説明したことを願っています!


これは私が望む出力です:

配列([0] =>配列([0] => 2499 [1] => 5314.50)[1] =>配列([0] => 639 [1] => 75.00))

つまり、配列([0] => UNIQUEID [1] => SUM)

4

1 に答える 1

0

これを行うための最良の方法は、おそらく最初に$ entityIdをキーとして使用して連想配列(ハッシュ)を構築し(それぞれに一意のエントリを提供します)、値として残りの$の累積合計を作成することです。

// 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 に答える