首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按范围值分组数组

按范围值分组数组
EN

Stack Overflow用户
提问于 2017-09-04 18:17:19
回答 3查看 919关注 0票数 1

我有一个数组1,1,2,2,2,3,4,5,6,6,7,我可以根据范围值对数组进行分组,从而得到最终结果:

'1-3' = [1,1,2,2,2,3]; // Count is 6 '4-5' = [4,4,5]; // Count is 3 '6-7' = [6,6,6,7]; // Count is 4

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-04 19:03:27

我相信你需要的是:

代码语言:javascript
复制
function array_get_range($array, $min, $max) {
    return array_filter($array, function($element) use ($min, $max) {
       return $element >= $min && $element <= $max; 
    });
}

$array = [1,1,2,2,2,3,4,4,5,6,6,6,7];

$range13 = array_get_range($array, 1, 3); // [1, 1, 2, 2, 2, 3]
$range45 = array_get_range($array, 4, 5); // [4, 4, 5]
$range67 = array_get_range($array, 6, 7); // [6, 6, 6, 7]
票数 1
EN

Stack Overflow用户

发布于 2017-09-04 18:27:15

使用范围创建一个新数组,然后遍历值和内部范围。如果当前值在范围内,则将记录添加到当前范围:

代码语言:javascript
复制
<?php
$numbers = [1,1,2,2,2,3,4,4,5,6,6,6,7];
$counts = [];
$counts[] = ["values"=> [1, 3], "records" => []]; // first value in "values" is min, second is max
$counts[] = ["values"=> [4, 5], "records" => []];
$counts[] = ["values"=> [6, 7], "records" => []];
foreach ($numbers as $number) {
    foreach ($counts as $key => &$value) {
        if ($number >= $value["values"][0] && $number <= $value["values"][1]) { // if between the range, add it to the records
            $value["records"][] = $number;
        }
    }
}
echo "<pre>";
foreach ($counts as $count) {
    echo $count["values"][0]." - ".$count["values"][1]." = ".count($count["records"])." elements<br>";
}

演示

票数 0
EN

Stack Overflow用户

发布于 2017-09-05 02:32:37

我认为array_intersect()range()sizeof()/count()一起为这项任务做了更干净的工作。它消除了双重条件。

代码:(演示)

代码语言:javascript
复制
function count_range($array, $min, $max) {
    return sizeof(array_intersect($array, range($min, $max)));
}

$array = [1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 7];

echo count_range($array, 1, 3);  // 6 from [1, 1, 2, 2, 2, 3]
echo count_range($array, 4, 4);  // 2 from [4, 4]
echo count_range($array, 2, 7);  // 11 from [2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 7]
  • range()创建一个由一个或多个连续整数组成的白名单数组。
  • array_intersect()同时比较输入数组和白名单数组。
  • sizeof()只是count()的别名,用于确定保留了多少元素。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46042312

复制
相关文章

相似问题

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