索引是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
)
对此有何解决方案?
谢谢大家。
答案 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示例。