这是我现在正在做的事情,我从数据库中得到了一个这样的数组:
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_product_price*wop_product_count"合并为该数组中的新数组,它具有相同的"wop_product_owner_id",新数组应如下所示:
array (size=1)
0 =>
array (size=5)
'woner_id' => string '100007' (length=6)
'woner_name' => string 'Jack' (length=6)
'woner_photo' => string '' (length=5)
'woner_total' => float '177.6.00'
'woner_paid' => boolean 'false'
基本上,就像您在 Mysql 中使用 sum() 和分组一样进行查询。而且,我已经有一种方法可以做到这一点,这是代码:
$tmps = 数组();
foreach ($products as $p) {
$owner_id = $p['wop_product_owner_id'];
if (empty($tmps)) {
$tmps[] = 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 {
foreach ($tmps as $key => $value) {
if (array_search($owner_id, $value) === FALSE) {
$tmps[] = 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[$key]['woner_total'] = (float) $tmps[$key]['woner_total'] + (float) $p['wop_product_price'] * (float) $p['wop_product_count'];
}
}
}
}
return $tmps;
但是,我其实不喜欢它,我想一定有比这更优雅的方式!你怎么看?有什么想法吗?
你可以使用这个
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;