迭代多维PHP数组,平均键相同的值
我有一个类似于下面的数组,但要大得多:迭代多维PHP数组,平均键相同的值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个类似于下面的数组,但要大得多: Array( [0] => Array( [carrier] => Test Carrier [value] => 5 ), [1] => Array( [carrier] => New Carrier [value] => 18 ), [2] => Array( [carrier] = Test
Array(
[0] => Array(
[carrier] => Test Carrier
[value] => 5
),
[1] => Array(
[carrier] => New Carrier
[value] => 18
),
[2] => Array(
[carrier] = Test Carrier
[value] => 8
)
)
实际上,大约有306个数组具有载波和值的键值对。我想做的是迭代上面的这个数组(它有多个带有carrier=>testcarrier的数组),在载波名称相同的地方添加相应的值,然后除以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
);
}
}
如何做到这一点?
<?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);