문제
배열 (배열 배열)을 합계해야합니다. 내 배열의 구조는 다음과 같습니다.
Array([id]=>some_id, [name]=>some_name, [value]=>float_value)
나는 이전과 같이 n 배열이 있다는 것을 알고 있습니다. 동일한 ID를 가진 사람들을 요약해야합니다.
아이디어가 있습니까?
예시:
**
Array
(
[id] => 1
[name] => John00
[value] => 0.9
)
Array
(
[id] => 2
[name] => Ann01
[value] => 0.011
)
Array
(
[id] => 3
[name] => Ann
[value] => 0.1
)
**
해결책
나는 당신이 무엇을하려고하는지 잘 모르겠습니다. 각 ID에 대해 ID로 그룹화 된 합계를 원하지만 잘못되었을 수 있습니다.
<?php
//result array of sums
$sums = array();
//example data
$source = array(
array('id'=>3, 'name'=>'some_name6', 'value'=>1.6),
array('id'=>1, 'name'=>'some_name', 'value'=>1.4),
array('id'=>1, 'name'=>'some_name2', 'value'=>7.2),
array('id'=>2, 'name'=>'some_name3', 'value'=>4.4),
array('id'=>1, 'name'=>'some_name4', 'value'=>1.2),
array('id'=>2, 'name'=>'some_name5', 'value'=>1.4),
);
foreach ($source as $ar) {
//create an entry for this id in the array of sums if does not exist.
if (!isset($sums[ $ar['id'] ])) {
$sums[ $ar['id'] ] = 0;
}
//add 'value' key to sum for that id
$sums[ $ar['id'] ] += $ar['value'];
}
//sort by id
ksort($sums);
print_r($sums);
/* output:
Array
(
[1] => 9.8
[2] => 5.8
[3] => 1.6
)
*/
다른 팁
이것은 데이터베이스에서 나오는 것처럼 보이며 쿼리는 그러한 일을하기에 가장 좋은 곳입니다. (이것이 DB의 데이터가 아닌 경우이 답변을 무시하십시오).
SELECT id, SUM(value)
FROM YourTable
-- add your WHERE-constraints here
GROUP BY id;
pseduo 코드 :
$totals = array();
function add($in)
{
global $totals;
if(!isset($totals($in['id']))
{
$totals[$in['id']] = $in['value'];
}else
{
$totals[$in['id']] += $in['value'];
}
}
array_walk('add',$input_array);
var_dump($totals);
제휴하지 않습니다 StackOverflow