使用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;