我有一个类似下面的数组,但要大得多:
Array(
[0] => Array(
[carrier] => Test Carrier
[value] => 5
),
[1] => Array(
[carrier] => New Carrier
[value] => 18
),
[2] => Array(
[carrier] = Test Carrier
[value] => 8
)
)
实际上,大约有306个阵列具有载波和值的键值对。我想做的是迭代上面的这个数组(它有多个数组,载波=>测试载波),在载波名称相同的地方加上相应的值,然后除以2得到平均值。
因此,对于上面的例子,伪代码中的结果是:
代码注意到承运人与另一个(即测试承运人)相同
为13添加8+5,但请记住它有2个
carrier = Test Carrier
数组,因此它除以2并将值设置为等于该值。如果第三次发生这种情况,它会加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
);
}
}
如何做到这一点?
<?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);