如何在PHP中的key =>值对数组中获取最小值,最大值和平均值?

时间:2014-12-17 03:52:44

标签: php arrays math max min

我有一个由键值对组成的可变大小数组;值总是浮点数,但键是字符串 - 例如:

$prices = array( 
    'name'   => 99.23
    'abc'    => 239.2,
    'xyz'    => 102.452,
    'foobar' => 152,
    'barfoo' => 159.2394
    ...
)

我需要至少获得三个值,但这也取决于数组的大小。 例如,如果数组由6个键组成,我想得到两个最低的,两个最高的,其余的两个(应该落在中间)。如果7个键可能是2个最低,2个最高和中间3.如果是8,可能是3-2-3 ...

我不确定如何创建模式,但理想情况下应尽可能均匀分布,如果可以考虑平均剩余值中有点过高或过低的价格,则更好(而不是分别在最高或最低的组中推送它们)。

我事先不能知道数组中的键数(甚至可能只有1到12个),也不能知道它们的值中的数值范围(总是一个正的浮点数或整数)。 我需要保留每个组中的密钥,因为我稍后需要使用它们。

我知道有min()和max()但这些是用于数字列表而不是键值对。

理想情况下,我希望得到这样的结果:

$lowest = array(
    'name'   => 99.23
    'xyz'    => 102.452
);

$highest = array(
    'abc'    => 239.2,
    'barfoo' => 159.2394
);

$average = array(
    'foobar' => 152,
);

最终我只需要保留以后使用的密钥,从上面的这3个数组开始。 (上面的例子假设数组中有5个键,可能会有所不同)。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情。

$prices = array( 
    'abc' => 239.2,
    'xyz' => 102.452,
    'foobar' => 152,
    'barfoo' => 159.2394,
    'be' => 26.234,
    'dfi' => 789.233
    );

$len1 = ceil(count($prices)/3);    //calculate boundary array length
$len2 = count($prices) - 2*$len1;  //calculate middle array length

sort($prices);  //sorting array

$array1 = array_slice($prices,0,$len1);   //get first array (min)
$array2 = array_slice($prices,$len1,$len2);   //get second array (middle)
$array3 = array_slice($prices,$len1+$len2,$len1);   //get third array (max)