如何从数组中获取“最大范围”

时间:2010-12-29 14:36:15

标签: php

索引是00到23(24小时制)

我想要实现的是获得最大的最大范围。

每个数组最多包含24个元素。其中,我希望得到所有高(范围)的。

所以, 对于第一个阵列 - 10,16,19,19 第二 - 18,19,20 第三 - 9,11。

Array
(
    [00] => 10
    [01] => 19
    [02] => 10
    [03] => 4
    [04] => 1
    [13] => 16
    [14] => 2
    [15] => 5
    [16] => 2
    [17] => 3
    [18] => 1
    [19] => 1
    [20] => 1
    [21] => 5
    [22] => 1
    [23] => 2
)

Array
(
    [09] => 6
    [10] => 20
    [11] => 18
    [12] => 19
    [13] => 3
    [15] => 11
    [16] => 9
    [18] => 10
)
Array
(
    [00] => 4
    [01] => 3
    [12] => 4
    [16] => 4
    [21] => 9
    [22] => 11
    [23] => 6
)

问题是,这些值可能会完全改变,就像这个 -

Array
(
    [13] => 117
    [14] => 221
    [15] => 211
    [16] => 145
    [17] => 23
    [18] => 15
    [19] => 1
)

对此有何解决方案?

谢谢大家。

4 个答案:

答案 0 :(得分:3)

有点不清楚你想如何选择哪些值为“高”,但是:

在PHP 5.3 +

$filetered = array_filter($yourArray, function($v) {return $v > 10;});

将返回值大于10的数组。

在PHP< 5.3中,您需要创建一个回调函数,而不是将闭包传递给array_filter。

答案 1 :(得分:2)

使用array_keys()max()获取最大键值:

$keys = array_keys($myArray);

$maxKey = max($keys);

答案 2 :(得分:0)

您可以使用array_filter()过滤掉不在以下范围内的值:

function is_between_10_and_20($v)
{
    return ($v >= 10 && $v <= 20);
}

$result = array_filter($arr, "is_between_10_and_20")

答案 3 :(得分:0)

我认为你想要的东西(虽然不是很清楚什么是“高”值)可以用asort()完成。如果用数字对数组进行排序:

asort($yourarray, SORT_NUMERIC);

然后您可以从排序数组中检索第一个元素。你甚至没有指定应该检索多少个元素,但我猜它是3,虽然你似乎不想要低于10的任何东西,所以只需使用array_slice()来提取最后三个元素,如果有的话低于10就丢弃它。

将所有内容放在一起会产生类似的结果:

asort($yourarray, SORT_NUMERIC);
$top3 = array_slice($yourarray, -3, null, true)
$filtered = array_filter($top3, function($v) {return $v > 10;});

注意:我在答案的最后部分使用了Mchl示例。