2014-09-06 41 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