我有一个类似下面的数组,但更大:
Array(
[0] => Array(
[carrier] => Test Carrier
[value] => 5
),
[1] => Array(
[carrier] => New Carrier
[value] => 18
),
[2] => Array(
[carrier] = Test Carrier
[value] => 8
)
)
实际上,大约有306个阵列具有载波和值的键值对。我想要做的是上面的这个数组的迭代(它有多个数组,载体=> Test Carrier)并添加相应的值,其中载体名称相同,然后除以2以达到平均值。
因此,对于上面的示例,伪代码的结果将是:
代码注意到承运人与另一承运人(即承运人)相同
为13添加8 + 5,但记得它有2个数组carrier = Test Carrier
因此它除以2并将值设置为等于该值。如果它第三次发生,它会加上并除以2.目标是获得平均值,如果有15个具有相同运营商名称的记录添加所有值并除以15。
返回一个数组,其数据与上面相同,但没有重复的运营商名称,其值等于所有具有相同名称的数组的平均值。
这是我迄今为止所做的,但它不完整:
$cars = array(
'carriers' => array(
)
);
$avgs = array();
foreach($arr as $new) {
if(in_array($new['carrier'], $cars['carriers'])) {
$avgs['value'] = $avgs['value'] + $new['value'] / $cars['count'];
} else {
$avgs[] = $new;
$cars['carriers'] = array(
'carrier' => $new['carrier'],
'count' => 0
);
}
}
如何做到这一点?
答案 0 :(得分:0)
<?php
$data = array(
array(
"carrier" => "Test Carrier",
"value" => 5
),
array(
"carrier" => "New Carrier",
"value" => 18
),
array(
"carrier" => "Test Carrier",
"value" => 8
)
);
$results = array();
foreach($data as $row){
//print_r($row);
$carrier = $row['carrier'];
$value = $row['value'];
if( array_key_exists ( $carrier , $results ) ){
$results["$carrier"]["value"] = ( ( $results["$carrier"]["count"] * $results["$carrier"]["value"] ) + $value ) / ( $results["$carrier"]["count"] + 1 );
$results["$carrier"]["count"] = $results["$carrier"]["count"] + 1;
}else{
$results["$carrier"] = array("value"=>$value, "count" => 1);
}
//echo "Processing carrier: $carrier value: $value </br>";
}
print_r($results);