首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中获取key=>value对数组中的最小值、最大值和平均值?

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

Stack Overflow用户
提问于 2014-12-17 11:52:44
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
$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(),但它们是用于数字列表,而不是键值对。

理想情况下,我希望得到这样的东西:

代码语言:javascript
复制
$lowest = array(
    'name'   => 99.23
    'xyz'    => 102.452
);

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-12-17 12:09:09

你可以试试这样的东西。

代码语言:javascript
复制
$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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27518049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档