0

我有这个数组:

 $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;
    }

任何帮助,将不胜感激

4

2 回答 2

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
)
于 2013-09-23T12:05:50.713 回答
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);
于 2013-09-23T12:16:07.907 回答