使用group by(如mysql查询)执行sum(),但在php中使用多个数组

使用group by(如mysql查询)执行sum(),但在php中使用多个数组,php,arrays,Php,Arrays,下面是我现在正在做的事情,我从数据库中得到一个数组,如下所示: array (size=2) 0 => array (size=13) 'wop_product_owner_id' => string '100007' (length=6) 'wop_product_id' => string '100002' (length=6) 'wop_product_price' => string '18.80' (length

下面是我现在正在做的事情,我从数据库中得到一个数组,如下所示:

array (size=2)
  0 => 
    array (size=13)
      'wop_product_owner_id' => string '100007' (length=6)
      'wop_product_id' => string '100002' (length=6)
      'wop_product_price' => string '18.80' (length=5)
      'wop_product_count' => string '2.00' (length=4)
      'wop_product_unit' => string 'kg' (length=6)
  1 => 
    array (size=13)
      'wop_product_owner_id' => string '100007' (length=6)
      'wop_product_id' => string '100001' (length=6)
      'wop_product_price' => string '35.00' (length=5)
      'wop_product_count' => string '4.00' (length=4)
      'wop_product_unit' => string 'kg' (length=6)
我需要做的就是将每个项目与总“wop\U product\U price*wop\U product\U count”合并为该数组中的一个新数组,该数组具有相同的“wop\U product\U owner\U id”,新数组应如下所示:

数组(大小=1)
0 => 
数组(大小=5)
'woner_id'=>字符串'100007'(长度=6)
'woner_name'=>字符串'Jack'(长度=6)
'woner_photo'=>字符串“”(长度=5)
'woner_total'=>浮动'177.6.00'
'woner_paid'=>布尔值'false'
基本上,就像在Mysql中使用sum()和groupby进行查询一样。 我已经找到了一种方法,下面是代码:

$tmps=array()

但是,实际上我不喜欢它,我想一定有比这更优雅的方式!你怎么想?有什么想法吗?

你可以用这个

foreach ($products as $p) {
    $owner_id = $p['wop_product_owner_id'];

    if (empty($tmps[$owner_id])) {
        $tmps[$owner_id] = array(
            'woner_id' => $p['wop_product_owner_id'],
            'woner_name' => $p['wop_product_owner_name'],
            'woner_photo' => $p['wop_product_owner_photo'],
            'woner_total' => (float) $p['wop_product_price'] * (float) $p['wop_product_count'],
            'woner_paid' => (int) $p['wop_product_payment_id'] > 0
        );
    } else {

                $tmps[$owner_id]['woner_total'] = (float) $tmps[$key]['woner_total'] + (float) $p['wop_product_price'] * (float) $p['wop_product_count'];


    }
}

return $tmps;

以下是来自@budirec的新方法:

    $tmps = array();
    foreach ($products as $p) {
        $owner_id = 'owner_' . $p['wop_product_owner_id'];
        if (!isset($tmps[$owner_id])) {
            $tmps[$owner_id] = array(
                'woner_id' => $p['wop_product_owner_id'],
                'woner_name' => $p['wop_product_owner_name'],
                'woner_photo' => $p['wop_product_owner_photo'],
                'woner_total' => (float) $p['wop_product_price'] * (float) $p['wop_product_count'],
                'woner_paid' => (int) $p['wop_product_payment_id'] > 0
            );
        } else {
            $tmps[$owner_id]['woner_total'] = (float) $tmps[$owner_id]['woner_total'] + (float) $p['wop_product_price'] * (float) $p['wop_product_count'];
        }
    }

    return $tmps;

谢谢你的帖子,你的方式看起来比我的好!
    $tmps = array();
    foreach ($products as $p) {
        $owner_id = 'owner_' . $p['wop_product_owner_id'];
        if (!isset($tmps[$owner_id])) {
            $tmps[$owner_id] = array(
                'woner_id' => $p['wop_product_owner_id'],
                'woner_name' => $p['wop_product_owner_name'],
                'woner_photo' => $p['wop_product_owner_photo'],
                'woner_total' => (float) $p['wop_product_price'] * (float) $p['wop_product_count'],
                'woner_paid' => (int) $p['wop_product_payment_id'] > 0
            );
        } else {
            $tmps[$owner_id]['woner_total'] = (float) $tmps[$owner_id]['woner_total'] + (float) $p['wop_product_price'] * (float) $p['wop_product_count'];
        }
    }

    return $tmps;