我有一个返回如下的数组:
array(5) {
[0]=>
array(2) {
["order_id"]=>
string(3) "257"
["price"]=>
string(7) "20.3600"
}
[1]=>
array(2) {
["order_id"]=>
string(3) "256"
["price"]=>
string(7) "20.5500"
}
[2]=>
array(2) {
["order_id"]=>
string(3) "255"
["price"]=>
string(7) "30.0000"
}
[3]=>
array(2) {
["order_id"]=>
string(3) "255"
["price"]=>
string(7) "22.3800"
}
[4]=>
array(2) {
["order_id"]=>
string(3) "254"
["price"]=>
string(7) "20.6300"
}
}
我最终想要的是:
array(4) {
[0]=>
array(2) {
["order_id"]=>
string(3) "257"
["price"]=>
string(7) "20.3600"
}
[1]=>
array(2) {
["order_id"]=>
string(3) "256"
["price"]=>
string(7) "20.5500"
}
[2]=>
array(2) {
["order_id"]=>
string(3) "255"
["price"]=>
string(7) "52.3800"
}
[3]=>
array(2) {
["order_id"]=>
string(3) "254"
["price"]=>
string(7) "20.6300"
}
}
逻辑是,如果数组包含匹配的订单号,则将这些订单号的价格加在一起,并返回一个新的数组,其中包含唯一的订单ID和添加的价格if和一个订单ID。
因此,在示例中,由于有两个order_id相同(255),其价格为22.38和30,因此新数组应该只有一个order_id 255项,相关价格为52.38。
目前我已经能够使用此功能仅返回唯一ID:
function super_unique($array,$key) {
$temp_array = array();
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]]))
$temp_array[$v[$key]] =& $v;
}
$array = array_values($temp_array);
return $array;
}
我已经尝试过这样的事情,以便将价格加在一起,但我得到了操作数错误:
function super_unique_addition($array,$key,$total) {
$temp_array = array();
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]])) {
$temp_array[$v[$key]] =& $v;
$temp_array[$v[$total]] += $v;
}
}
$array = array_values($temp_array);
return $array;
}
非常感谢对此的任何见解!在此先感谢您的帮助!
答案 0 :(得分:0)
只需array_reduce
您的资料即可按订单价格进行分组:
$newArray = array_reduce($array, function($memo, $item){
$memo[$item['order_id']] += $item['price'];
}, [])
编辑:请注意,您可以在查询时更好地GROUP/SUM
数据。
答案 1 :(得分:0)
可能:
<?php
$your_array = array( ... );
# Loop array
for( $i=0; $i<count($your_array); $i++ )
{
# Loop array again for each item in it
for( $j=0; $j<count($your_array; $j++) )
{
# If the order IDs are the same, add the prices and make the $j array values null
if( $your_array[$i]["order_id"] === $your_array[$j]["order_id"] )
{
$your_array[$i]["price"] += $your_array[$j]["price"];
$your_array[$j]["order_id"] = null;
$your_array[$j]["price"] = null;
}
}
}
# array_filter should remove the null values
$final_array = array_filter($your_array);
?>
答案 2 :(得分:0)
你可以使用普通的&#39; foreach on this,并在新阵列上构建它。考虑这个例子:
$values = array(
0 => array('order_id' => '257', 'price' => '20.3600'),
1 => array('order_id' => '256', 'price' => '20.5500'),
2 => array('order_id' => '255', 'price' => '30.0000'),
3 => array('order_id' => '255', 'price' => '22.3800'),
4 => array('order_id' => '254', 'price' => '20.6300'),
);
$new_values = array();
foreach($values as $key => $value) {
$new_values[$value['order_id']]['order_id'] = $value['order_id'];
// initialize price
if(!isset($new_values[$value['order_id']]['price'])) $new_values[$value['order_id']]['price'] = 0;
$new_values[$value['order_id']]['price'] += $value['price'];
}
$new_values = array_values($new_values); // reindex the array
print_r($new_values); // print
答案 3 :(得分:0)
function _new_array()
{
$temp1 = [];
foreach (func_get_args() as $arg)
{
if (!is_array($arg)) continue;
foreach ($arg as $val)
{
if (isset($temp1[$val['order_id']]))
$temp1[$val['order_id']] += $val['price'];
else
$temp1[$val['order_id']] = $val['price'];
}
}
$result = [];
foreach ($temp1 as $k => $v) $result[] = ['order_id' => $k, 'price' => $v];
return $result;
}
$result = _new_array($array1, $array2, $array3);