【发布时间】:2015-02-15 13:20:58
【问题描述】:
我有一个由键值对组成的可变大小数组;值始终是浮点数,但键是字符串 - 例如:
$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 个键,可能会有所不同)。
【问题讨论】:
-
php.net/asort,然后是php.net/array_slice,但你喜欢它。如果您需要更具体的帮助,则必须给出更具体的目标。
-
好吧,
array_slice再次通过对0,2、-2和2,-2进行切片使这变得微不足道。但是,由于您似乎不确定这就是您想要的,因此很难给您具体的建议。 -
我正在阅读文档,谢谢