2017-05-14 32 views
1

我有一個PHP數組,每個月顯示平均數。現在這個數組可以包含同一個月的多個條目。如果是這種情況,則數字必須總結併除以每月的條目數:通過計算相同鍵的平均數來平展PHP中的數組

例如,五月=(3.15 + 2.29 + 2.36)/ 3 = 2.6

輸入:

$result = [ 
    0 => ['April' => 4.36], 
    1 => ['May' => 3.15], 
    2 => ['May' => 2.29], 
    3 => ['May' => 2.36] 
]; 

輸出:

$result = [ 
    [0] => ['April' => 4.36], 
    [1] => ['May' => 2.60] 
]; 

任何想法,這可怎麼辦呢?

+0

只是看看我的【答案】(http://stackoverflow.com/a/43964532/6521116) –

回答

0

這裏在第一個循環中,我們迭代輸入數組以根據month收集值,而在第二個循環中,我們使用array_walk來遍歷數組以找到平均值。使用功能array_sumcount

Try this code snippet here

<?php 

ini_set('display_errors', 1); 

$Array = [ 
    0 => ['April' => 4.36], 
    1 => ['May' => 3.15], 
    2 => ['May' => 2.29], 
    3 => ['May' => 2.36] 
]; 
$result=array(); 
//Gathering values according to months. 
foreach ($Array as $value) 
{ 
    $result[key($value)][]=$value[key($value)];//using key function to get the first key of array 
} 
//using array_sum for finding sum of array. 
array_walk($result,function($value,$key) use (&$newResult){ 
    $newResult[] = array($key =>array_sum($value)/count($value)); 
}); 
print_r($newResult); 
+0

感謝。由於我有多個數組,因此我不得不做一個小編輯。你認爲你的功能也適用於這個嗎?乾杯 – doonot

+0

@doonot Yaah當然,如果你有一個相同格式的大陣列,它會工作正常 –

+0

你能更新你的答案嗎?謝謝! – doonot

0

您可以使用多維數組。

多維數組是數組中的數組,您希望多少次。

https://www.w3schools.com/php/php_arrays_multi.asp

http://php.net/manual/en/language.types.array.php

因此,有關你的代碼,讓我們說11月以來,這些數字: 4,3,2和1

你可以這樣做:

$result = array(
"November" => array(4,3,2,1) 
) 

然後你會發現數組的長度,通過這樣做來訪問多維對象:

$result["November"][0] 

(這將輸出4)

然後寫一個foreach腳本來確定平均值。我會把它留給你。

0

試試這個,檢查live demo

$array = []; 
foreach($result as $v) 
{ 
    $array[key($v)][] = current($v); 
} 
$result = array_map(function($v){return array_sum($v)/count($v);}, $array);