Php 从数组和总和中获取唯一值

Php 从数组和总和中获取唯一值,php,arrays,multidimensional-array,sum,unique,Php,Arrays,Multidimensional Array,Sum,Unique,从这个Array()中,我想获取amount\u total、shipping和partner的值,并按特定的partner进行合计。因此,例如合作伙伴=>2665的总金额应为41.79+55.95,依此类推,请帮助。我不想通过SQL来实现这一点,因为我也需要数据 Array ( [0] => Array ( [amount_total] => 41.79 [amount_shipping] => 4.99 [am

从这个
Array()
中,我想获取
amount\u total
、shipping和partner的值,并按特定的partner进行合计。因此,例如
合作伙伴=>2665
的总金额应为41.79+55.95,依此类推,请帮助。我不想通过SQL来实现这一点,因为我也需要数据

Array
(
    [0] => Array
    (
        [amount_total] => 41.79
        [amount_shipping] => 4.99
        [amount_partner] => 14.8
        [partner] => 2665
    )
    [1] => Array
    (
        [amount_total] => 55.95
        [amount_shipping] => 19.96
        [amount_partner] => 11
        [partner] => 2665
    )
    [2] => Array
    (
        [amount_total] => 51.96
        [amount_shipping] => 7.98
        [amount_partner] => 23.98
        [partner] => 51754
    )
    [3] => Array
    (
        [amount_total] => 24.55
        [amount_shipping] => 4.99
        [amount_partner] => 5.67
        [partner] => 11513
    )
)

我认为在这个数组中循环并将总数存储在新数组中,同时在_数组中检查
()就足够了。您所需要做的就是每次循环一个元素时,检查它是否已经在新数组中,如果已经在新数组中,则执行必要的数学运算。我建议这样做:

   $res['totals']=array();

foreach($result as $res)
{
    $partner = $result['partner'];
    $res['totals'][$partner]+=$result['total_amount'];
}   
这样,您只需在一个位置获得所需的所有数据:合作伙伴数组“$res”


希望对你有帮助

您可以使用PHP来实现这一点,但这不是必需的。 数据库可以更有效地做到这一点

我假设您当前的查询是这样的

SELECT
    `amount_total`,
    `amount_shipping`,
    `amount_partner`,
    `partner`
FROM
    `salesLeads`
WHERE
    [..]
MySQL为您提供了很好的聚合函数,就像您可以与

在您的PHP脚本中,您以相同的方式访问它,但它已经由合作伙伴对最终数字进行了分组和汇总

e、 g

编辑

因为您需要一个PHP解决方案,它同样比查询两次更有效:

$partnerSums = array();
while ( $row = $result->fetch_assoc() ) {
     if ( !array_key_exists( $row['partner'], $partnerSums ) {
          $partnerSums[$row['partner']] = $row;
     } else {
          $partnerSums[$row['partner']]['amount_total'] += $row['amount_total'];
          $partnerSums[$row['partner']]['amount_shipping'] += $row['amount_shipping'];
          $partnerSums[$row['partner']]['amount_partner'] += $row['amount_partner'];
     }
}

print_r( $partnerSums );

这是一个数据库结果集吗?所以我在做foreach($result as$res){$partner[$res['partner']]=array('amount_total'=>?);}是的,这是数据库结果所以我在做foreach($result as$res){$partner[$res['partner']]=数组('amount_total'=>?);}实际上没有读到“不想在SQL中这样做,因为…”,看看这似乎不起作用它没有给我该特定合作伙伴的总数您的示例合作伙伴的结果是什么
$partnerSums[2665]
?请注意,我建议的代码旨在为您提供一个解决方案,而不是用于生产用途。我对如何连接数据库知之甚少,例如,结果迭代可能需要根据适配器进行调整
if ($result = $mysqli->query($query)) {

    while ($row = $result->fetch_assoc()) {
        print_r( $row );
    }

    $result->close();
}
$partnerSums = array();
while ( $row = $result->fetch_assoc() ) {
     if ( !array_key_exists( $row['partner'], $partnerSums ) {
          $partnerSums[$row['partner']] = $row;
     } else {
          $partnerSums[$row['partner']]['amount_total'] += $row['amount_total'];
          $partnerSums[$row['partner']]['amount_shipping'] += $row['amount_shipping'];
          $partnerSums[$row['partner']]['amount_partner'] += $row['amount_partner'];
     }
}

print_r( $partnerSums );