2017-09-30 83 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

我编辑了我的答案。核实。 –