使用数组PHP的范围计算数据

时间:2018-03-17 15:29:06

标签: php

我想使用PHP从数组中使用范围库计数数据。 这是我的数组

$array = array(
            1.1, 2.2, 3.2, 4.5, 4.2,
            5.4, 6.2, 7.1, 8, 9.4, 10,
            1.7);

我的预期输出就像(我手动设置的范围数量,我只想计算包含我的角色的数据量):

1.00 - 2.50 : 3 data
2.51 - 3.50 : 0 data
3.51 - 4.00 : 1 data

我尝试这样写但它仍然无法正常工作

$start = 1;        
$end = 2.5;        
$int = 0;
   foreach ($array as $key => $value) {
      if ($start>=$value && $end<=$value) {
          $int++;
      }
   }
echo $int;

请帮我解决这个简单的案例。非常感谢

2 个答案:

答案 0 :(得分:1)

您必须设置range,因为它是一致的值。您可以使用array_reducearray_filter来汇总数据。

$array = array(1.1, 2.2, 3.2, 4.5, 4.2,5.4, 6.2, 7.1, 8, 9.4, 10,1.7);
$range = array("1.00-2.50","2.51-3.50","3.51-4.00");

$grouped = array_reduce($range, function($c,$v) use($array) {
    $group = array_filter($array,function($x) use ($v){
        $t = explode("-",$v);
        return $x >= $t[0] && $x <= $t[1];
    });

    $c[ $v ] = count( $group );
    return $c;
},array());

echo "<pre>";
print_r( $grouped );
echo "</pre>";

这将导致:

Array
(
    [1.00-2.50] => 3
    [2.51-3.50] => 1
    [3.51-4.00] => 0
)

答案 1 :(得分:0)

如果我没有误解你的问题那么这对你有用。

$array = array(
            1.1, 2.2, 3.2, 4.5, 4.2,
            5.4, 6.2, 7.1, 8, 9.4, 10,
            1.7);

$count = [];
foreach ($array as $key => $value) {

   if ($value<ceil($value)) {
        $count[floor($value)."-".ceil($value)]++;
    }
}

print '<pre>';
print_r($count);
print '</pre>';

<强>输出:

 Array
 (
  [1-2] => 2
  [2-3] => 1
  [3-4] => 1
  [4-5] => 2
  [5-6] => 1
  [6-7] => 1
  [7-8] => 1
  [9-10]=> 1
 )

参见演示: https://eval.in/973669