PHP-按数字范围将多维数组排序到另一个数组中


PHP- Sorting multidimensional array into another by range of numbers

我有一个从DB获得的多维数组。数组每小时都有许多视图作为视图记录在数据库中,它看起来像这样:

array:11 [▼
    0 => array:2 [▼
         "hour" => 0
         "views" => 1
         ]
    1 => array:2 [▼
         "hour" => 1
         "views" => 1
         ]
    2 => array:2 [▼
         "hour" => 4
         "views" => 1
         ]
    ...and so on
    ]

我需要制作一个新的数组,该数组将包含2小时内的视图数。例如,从上面显示的数组中,我想得到一个数组,其视图数在0-2之间,即为2,在这种情况下,2-4的视图数为0,依此类推

您可以在Mysql查询中完成:

select floor(hour/2) range, sum(views) sum 
   from thetable 
 group by range

您只需使用foreach创建一个新数组。

<?php

$your_array = [0 => [
         "hour" => 0,
         "views" => 4
         ],
    1 => [
         "hour" => 1,
         "views" => 12
         ],
    2 => [
         "hour" => 4,
         "views" => 1
         ],
    3 => [
         "hour" => 2,
         "views" => 9
         ],
    4 => [
         "hour" => 21,
         "views" => 19
         ]
         ];   

foreach ($your_array as $value){
    for($i=0;$i<=22;$i=$i+2){
    $j=$i+2;
    if($value['hour']>=$i && $value['hour']<$j){
        isset($result[$i.'-'.$j])?$result[$i.'-'.$j]+=$value['views']:$result[$i.'-'.$j]=$value['views'];
    }
    }
}
print_r($result);

请尝试以下代码。

$arr = [0 => [
         "hour" => 0,
         "views" => 1
         ],
    1 => [
         "hour" => 1,
         "views" => 1
         ],
    2 => [
         "hour" => 4,
         "views" => 1
         ]];    
foreach($arr as $row)
{
    if($row['hour'] >= 0 && $row['hour'] <= 2)
    {
        $newArr['0-2'] = isset($newArr['0-2']) ? ($newArr['0-2'] + 1) : 1;
    }
    if($row['hour'] > 2 && $row['hour'] < 4)
    {
        $newArr['2-4'] = isset($newArr['2-4']) ? ($newArr['2-4'] + 1) : 1;
    }
}
print_r($newArr);

输出

Array
(
    [0-2] => 2
)