我有这个数组:
$data = Array
(
[1] => Array
(
[id] => '52040344'
[outcome] => 0
[names] => Array
(
[name_eng] => 'this is a name 2'
)
)
[2] => Array
(
[id] => 54030157
[outcome] => 1108541
[names] => Array
(
[name_eng] => 'this is a name 1'
)
)
[3] => Array
(
[id] => '54030157
[outcome] => '109635'
[names] => Array
(
[name_eng] => 'this is a name 1'
)
)
)
我想返回一个数组,其中所有结果的总和具有相同的id,知道如果它们具有相同的id,则它们具有相同的名称。
所以我可以得到
array (
[0] => array( 'id' => '54030157', 'outcome' => 'sum of outcome', 'name' => 'this is name 1' ),
[1] => array( 'id' => '52040344', 'outcome' => 'sum of outcome', 'name' => 'this is name 2' )
)
我怎么能做到这一点??。
这是我到目前为止所尝试的内容:
public function process($data){
$outputArray = array();
foreach ($data as $key => $value) {
}
return $outputArray;
}
任何帮助将不胜感激
答案 0 :(得分:1)
编辑:在更新原始答案之前回答!没有注意到一些特殊构造的输出数组,而只是计算结果。
这是一个你可以使用的小功能:
function computeOutcome($array) {
$result=array();
foreach ($array as $item) {
$id=$item['id'];
if (isset($result[$id])) {
$result[$id]=$result[$id]+$item['outcome'];
} else {
$result[$id]=$item['outcome'];
}
}
return $result;
}
将多维数组作为参数传递。测试示例:
$test=array(
array('id'=>100, 'outcome'=>'45'),
array('id'=>200, 'outcome'=>'66'),
array('id'=>100, 'outcome'=>'88'),
array('id'=>200, 'outcome'=>'45')
);
print_r(computeOutcome($test));
输出
Array
(
[100] => 133
[200] => 111
)
答案 1 :(得分:0)
或者您可以使用array_walk:
$returnedArray = array();
function makeArray(&$element)
{
global $returnedArray;
$returnedArray[$element['id']]['id'] = $element['id'];
@$returnedArray[$element['id']]['outcome'] += $element['outcome'];
$returnedArray[$element['id']]['name'] = $element['names']['name_eng'];
}
array_walk($data, 'makeArray');
var_dump($returnedArray);