2017-09-30 126 views
0

我有通道的陣列,到目前爲止,我懂得回報的最大值和最小值是這樣的:PHP從數組中查找中值並返回鍵和值?

// clear from any empty channels 
$channels = array_filter($scan['channels']); 

// get min/max values 
$min = array_keys($channels, min($channels)); 
$max = array_keys($channels, max($channels)); 
// this returns the channel name wich is what I need 

到目前爲止,我想獲得中位數鍵(頻道)的名字,我怎麼能做到這一點?

// this is the array of channels 
Array 
(
    [chann_1] => 155.755 
    [chann_2] => 154.61 
    [chann_3] => 156.719 
    [chann_4] => 156.727 
    [chann_5] => 155.797 
    [chann_6] => 157.615 
    [chann_7] => 154.257 
    [chann_8] => 151.724 
    [chann_9] => 156.549 
    [chann_10] => 156.594 
    [chann_11] => 157.56 
    [chann_12] => 156.405 
) 
+0

你希望所有的值儀式的平均值?如果是做array_sum($頻道)/計數($頻道) –

+0

上帝,平均是一樣的中位數,哈哈,讓我試試 –

+0

但我不需要的價值,但關鍵(頻道)名稱,任何想法? –

回答

1

試試這樣:

對數組進行排序。
獲取數組密鑰。
然後array_keys的一半數是中間值。 (爲了以防萬一,我加了一圈)。

$arr = Array(
"chann_1" => 155.755, 
"chann_2" => 154.61, 
"chann_3" => 156.719, 
"chann_4" => 156.727, 
"chann_5" => 155.797, 
"chann_6" => 157.615, 
"chann_7" => 154.257, 
"chann_8" => 151.724, 
"chann_9" => 156.549, 
"chann_10" => 156.594, 
"chann_11" => 157.56, 
"chann_12" => 156.405); 

Arsort($arr); 
//Var_dump($arr); 
$keys = array_keys($arr); 
Echo $keys[round(count($keys)/2)]; 

https://3v4l.org/ER3d4

0

使用array_search()$max_key=array_search($max,$yourArray);$min_key=array_search($min,$yourArray);$median=$max_key+$min_key/2;當然這取決於你的數組大小。

嘗試$median=array_search($max+$min/2,$yourArra);

+0

我需要介質密鑰而不是值 –

+0

array_search()返回一個值的關鍵字。 –

+0

我編輯了我的答案。覈實。 –