填写数组中缺少的元素

时间:2010-12-12 19:03:35

标签: php arrays date time

我有一个代码,可以每小时从数据库中生成最新 10小时的总帖子。现在,问题是只显示了几个小时的帖子,但这对我不起作用,因为我想将整个事物显示为图表。

当前数组的示例:

    array("12"=>"20403",
          "15"=>"17017",
          "17"=>"84013");

键表示24格式的小时。所以我需要的是一个用0值填充空小时的函数。

示例:

$currenthour=date('H'); // i think it may be based on the latest hour.

array("11"="0",
      "12"=>"20403",
      "13"=>"0",
      "14"=>"0",
      "15"=>"17017",
      "16"=>"0",
      "17"=>"84013",
      "18"=>"0",
      "19"=>"0",
      "20"=>"0");

谢谢!

3 个答案:

答案 0 :(得分:2)

foreach(range(0, 23) as $hour)
   if(!isset($ary[$hour]))
       $ary[$hour] = 0;
ksort($ary);

只填写最后几个小时,你可能需要像

这样的东西
function last_hours($hour, $cnt) {
    return $hour < $cnt - 1 ?
        array_merge(range($hour, 0), range(23, 25 - $cnt + $hour)) :
        range($hour, $hour - $cnt + 1);
}

然后

$now = date("G");
$new_array = array();
foreach(last_hours($now, 10) as $hour)
   $new_array[$hour] = isset($ary[$hour]) ? $ary[$hour] : 0;

答案 1 :(得分:1)

使用array_fill 使用循环执行(假设$hours是您的数组:

$currenthour=date('H');
for($i = $currenthour; $i < 23; $i++)
    if(!isset($hours[$i]))
         $hours[$i] = 0;

答案 2 :(得分:0)

您可以简单地遍历数组,并查看索引处的值是否已设置。像这样:

使用过去10小时进行编辑:

$currenthour=date('H')

$beginrange = $currenthour - 10
if ($beginrange =< 0)
    $beginrange = 23 + $beginrange
$endrange = $currenthour

//set up the for loop
foreach(range($beginrange, $endrange) as $i)
   //check if the element is set
   if(!isset($array[$i])) 
       // set it
       $array[$i] = 0;