具有相同键值的多个数组合并成一个数组
Multiple array with same key value merge into an array
我遇到了多数组计算的问题。我正在使用数据库mysql,操作语言是PHP。当我从数据库中获取结果时,结果显示具有固定键和值的多个数组。当一个数组键代码值与单独的数组键代码值相同时,此数组将合并为一个包含总数量和价格的数组。这是从数据库中获取结果。
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'bbb','name'=>'b','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>20,'price'=>12.00],
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>5,'price'=>8.00],
['code'=>'bbb','name'=>'b','qty'=>15,'price'=>10.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00],
并且我想将此结果自定义为这种格式。
['code'=>'aaa','name'=>'a','qty'=>40,'price'=>24.00],
['code'=>'bbb','name'=>'b','qty'=>35,'price'=>22.00],
['code'=>'ccc','name'=>'c','qty'=>25,'price'=>20.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00],
请帮我解决这个问题。我尝试了很多但没有得到任何解决方案。
可以通过一维数组实现...
$newArray = array(); //create new array..
foreach($array as $item) {
if(isset($newArray[$item['code']])) { //if already exist then sum of qty and price...
$newArray[$item['code']]['qty'] += $newArray[$item['code']]['qty'];
$newArray[$item['code']]['price'] += $newArray[$item['code']]['price'];
}else { //if first time then add array into them...
$newArray[$item['code']] = $item;
}
}
通过使用查询你可以这样做
SELECT code, name, SUM(qty), SUM(price)
from tableName
group by code
SELECT code, name, SUM(qty), price
from your_table_name
group by name
在使用 mysql 获取结果时使用分组依据。希望这会有所帮助。
试试这个
<?php
error_reporting(0);
$array=array(['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'bbb','name'=>'b','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>20,'price'=>12.00],
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>5,'price'=>8.00],
['code'=>'bbb','name'=>'b','qty'=>15,'price'=>10.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00]);
foreach($array as $item) {
$newArray[$item['code']]['code'] = $item['code'];
$newArray[$item['code']]['name'] = $item['name'];
$newArray[$item['code']]['qty'] += $item['qty'];
$newArray[$item['code']]['price'] +=$item['price'];
}
$newArray=array_values($newArray);
print_r($newArray);
?>
您可以使用array_reduce
给您想要的结果。匿名回调检查结果数组中是否存在当前值的代码,如果存在,则对当前数量和价格求和。如果不是,则当前值被推入结果数组。该代码使用原始数组中的第一个值初始化结果,这样我们就不必担心未定义的索引:
$newdata = array_reduce(array_slice($data, 1),
function ($c, $v) {
if (($k = array_search($v['code'], array_column($c, 'code'))) !== false) {
$c[$k]['qty'] += $v['qty'];
$c[$k]['price'] += $v['price'];
}
else {
$c[] = $v;
}
return $c;
}, array($data[0]));
print_r($newdata);
输出:
Array (
[0] => Array ( [code] => aaa [name] => a [qty] => 40 [price] => 24 )
[1] => Array ( [code] => bbb [name] => b [qty] => 35 [price] => 22 )
[2] => Array ( [code] => ccc [name] => c [qty] => 25 [price] => 20 )
[3] => Array ( [code] => ddd [name] => d [qty] => 20 [price] => 12 )
[4] => Array ( [code] => ggg [name] => g [qty] => 20 [price] => 12 )
)
我遇到了多数组计算的问题。我正在使用数据库mysql,操作语言是PHP。当我从数据库中获取结果时,结果显示具有固定键和值的多个数组。当一个数组键代码值与单独的数组键代码值相同时,此数组将合并为一个包含总数量和价格的数组。这是从数据库中获取结果。
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'bbb','name'=>'b','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>20,'price'=>12.00],
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>5,'price'=>8.00],
['code'=>'bbb','name'=>'b','qty'=>15,'price'=>10.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00],
并且我想将此结果自定义为这种格式。
['code'=>'aaa','name'=>'a','qty'=>40,'price'=>24.00],
['code'=>'bbb','name'=>'b','qty'=>35,'price'=>22.00],
['code'=>'ccc','name'=>'c','qty'=>25,'price'=>20.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00],
请帮我解决这个问题。我尝试了很多但没有得到任何解决方案。
可以通过一维数组实现...
$newArray = array(); //create new array..
foreach($array as $item) {
if(isset($newArray[$item['code']])) { //if already exist then sum of qty and price...
$newArray[$item['code']]['qty'] += $newArray[$item['code']]['qty'];
$newArray[$item['code']]['price'] += $newArray[$item['code']]['price'];
}else { //if first time then add array into them...
$newArray[$item['code']] = $item;
}
}
通过使用查询你可以这样做
SELECT code, name, SUM(qty), SUM(price)
from tableName
group by code
SELECT code, name, SUM(qty), price
from your_table_name
group by name
在使用 mysql 获取结果时使用分组依据。希望这会有所帮助。
试试这个
<?php
error_reporting(0);
$array=array(['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'bbb','name'=>'b','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>20,'price'=>12.00],
['code'=>'aaa','name'=>'a','qty'=>20,'price'=>12.00],
['code'=>'ddd','name'=>'d','qty'=>20,'price'=>12.00],
['code'=>'ccc','name'=>'c','qty'=>5,'price'=>8.00],
['code'=>'bbb','name'=>'b','qty'=>15,'price'=>10.00],
['code'=>'ggg','name'=>'g','qty'=>20,'price'=>12.00]);
foreach($array as $item) {
$newArray[$item['code']]['code'] = $item['code'];
$newArray[$item['code']]['name'] = $item['name'];
$newArray[$item['code']]['qty'] += $item['qty'];
$newArray[$item['code']]['price'] +=$item['price'];
}
$newArray=array_values($newArray);
print_r($newArray);
?>
您可以使用array_reduce
给您想要的结果。匿名回调检查结果数组中是否存在当前值的代码,如果存在,则对当前数量和价格求和。如果不是,则当前值被推入结果数组。该代码使用原始数组中的第一个值初始化结果,这样我们就不必担心未定义的索引:
$newdata = array_reduce(array_slice($data, 1),
function ($c, $v) {
if (($k = array_search($v['code'], array_column($c, 'code'))) !== false) {
$c[$k]['qty'] += $v['qty'];
$c[$k]['price'] += $v['price'];
}
else {
$c[] = $v;
}
return $c;
}, array($data[0]));
print_r($newdata);
输出:
Array (
[0] => Array ( [code] => aaa [name] => a [qty] => 40 [price] => 24 )
[1] => Array ( [code] => bbb [name] => b [qty] => 35 [price] => 22 )
[2] => Array ( [code] => ccc [name] => c [qty] => 25 [price] => 20 )
[3] => Array ( [code] => ddd [name] => d [qty] => 20 [price] => 12 )
[4] => Array ( [code] => ggg [name] => g [qty] => 20 [price] => 12 )
)