如何在 PHP 中聚合某个范围内的数字


How to aggregate numbers within a range in PHP

我有一个数组,数字范围从1到150。我想计算 1-50、51-100 和 101-150 范围内的数字。我不确定为什么我要为此苦苦挣扎,因为这应该很容易做到。

$test = ["12", "56", "123", "34", "67", "108", "29"];

期望的输出

$final_array = 
    Array 
    ( 
        [start] => 1 [end] => 50 [count] => 3
        [start] => 51 [end] => 100 [count] => 2
        [start] => 101 [end] => 150 [count] => 2
    )
这将

起作用,

        $test = array("12", "56", "123", "34", "67", "108", "29");
    $final_array    =   array(
        array('start' => 1 , 'end' => 50 , 'count' => 0),
        array('start' => 51 , 'end' => 100 , 'count' => 0),
        array('start' => 101 , 'end' => 150 , 'count' => 0),
    );
    for ($i=0;$i<count($test);$i++){
        if (($test[$i] > 0)&& ($test[$i] <= 50)){
            $final_array[0]['count']    =   $final_array[0]['count']+1;
        }else if($test[$i] > 50 && $test[$i] <= 100){
            $final_array[1]['count']    =   $final_array[1]['count']+1;
        }else if($test[$i] > 100 && $test[$i] <= 150){
            $final_array[2]['count']    =   $final_array[2]['count']+1;
        }
    }
    echo "<pre>";
    print_r($final_array); 
$final_array = array('range1' => 0, 'range2' => 0, 'range3' => 0);
foreach($test as $t){
    if($t>=1 and $t<=50)
        $final_array['range1']++;
    elseif($t>=51 and $t<=100)
        $final_array['range2']++;
    elseif($t>=101 and $t<=150)
        $final_array['range3']++;
}
$final_array    =   array(
    array('start' => 1 , 'end' => 50 , 'count' => 0),
    array('start' => 51 , 'end' => 100 , 'count' => 0),
    array('start' => 101 , 'end' => 150 , 'count' => 0),
);
for ($i=0;$i<count($test);$i++){
    if ($test[$i] > 0 && $test[$i] <= 50){
        $final_array[0]['count']    =   $final_array[0]['count']++;
    }else if($test[$i] > 50 && $test[$i] <= 100){
        $final_array[1]['count']    =   $final_array[1]['count']++;
    }else if($test[$i] > 100 && $test[$i] <= 150){
        $final_array[2]['count']    =   $final_array[2]['count']++;
    }else{
    }
}

试试这个

$test = array("12", "56", "123", "34", "67", "108", "29");
    $count1 = 0;$count2 = 0;$count3 = 0;
foreach($test as $t){    
    if($t > 0 && $t <= 50 ){ $count1 ++;
    }else if($t>50 && $t <=100){ $count2 ++;
    }else{ $count3 ++; }    
}
echo $count1.' - '.$count2.' - '.$count3;

大约和我能快速做到的效率一样高。

  $test = array(0,12,56,123,34,67,108,29,151);
  foreach($test as $val){
    if ($val == 0){continue;}
    elseif ($val < 51){$count1++;}
    elseif($val < 101){$count2++;}
    elseif($val < 151){$count3++;}
  }
  $final_array =array( 
  array('start' => 1,'end' => 50 ,'count' => $count1),
  array('start' => 51,'end' => 100 ,'count' => $count2),
  array('start' => 101,'end' => 150 ,'count' => $count3));

结果:

Array([0] => Array([start] => 1,  [end] => 50, [count] => 3)
      [1] => Array([start] => 51, [end] => 100,[count] => 2)
      [2] => Array([start] => 101,[end] => 150,[count] => 2)  
 )

我更喜欢< 51而不是<=50虽然编译器可能会为每个创建相同的机器代码,但它可能会使用更复杂的等式。 代码看起来更干净。

当使用elseif并从较低值到较高值时,没有理由对值进行两次测试。

在以下算法中,$val>=51 &&是不必要的。

if($val>=1 && $val<=50){$count1++;}
elseif($val>=51 && $val<=100){$count2++;} 

这样更有效:

if($val>0) and $val<51){$count1++;}
elseif($val<101){$count2++;}

整数运算符($count)
一个数组$final_array[0]['count'],尤其是一个关联数组,所以我在获取计数值后创建数组。

增量效率更高

$final_array[0]['count']++;

比加法:

$final_array[0]['count']    =   $final_array[0]['count']+1;