2014-09-06 66 views
0

我有这样的一个阵列之下,但大得多:迭代多维PHP数组,平均值,其中密钥是相同的

Array(
    [0] => Array(
     [carrier] => Test Carrier 
     [value] => 5 
    ), 
    [1] => Array(
     [carrier] => New Carrier 
     [value] => 18 
    ), 
    [2] => Array(
     [carrier] = Test Carrier 
     [value] => 8 
    ) 
) 

在现实中有大约306阵列与载体的键 - 值对,并值。我想要做的是迭代上面的这个数组(它有多个数组,载波=>测试载波),并在载波名称相同的情况下添加相应的值,然后除以2得到平均值。

因此,对于上面的例子中,其结果在伪代码将是:

  1. 代码注意到载波信号是与另一个相同(即测试载体)

  2. 添加8 + 5 13但是记得它有两个数组,carrier = Test Carrier,所以它除以2并设置值等于那个。如果它发生第三次,它将增加并除以2.目标是获得平均值,如果有15个记录具有相同的运营商名称并加上所有值并除以15.

  3. 返回一个数组数据如上,但没有重复的运营商名称,其值等于所有具有相同名称的数组的平均值。

这是我迄今但它是不完整的:

$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
<?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); 
+0

辉煌....就这样。 – asgwar12 2014-09-06 18:34:48