2010-12-12 137 views
2

我有一个代码,每小时产生一个数据库的总帖子为最新的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"); 

谢谢!

+0

为何否决? – Ryan 2010-12-12 19:13:35

回答

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; 
+0

嗨,谢谢,但我认为这将填补24小时范围,我只需要最近10小时 – Ryan 2010-12-12 19:07:17

+0

...因此,找出“最近10小时”的范围是什么,而对于循环而言。 – 2010-12-12 19:14:07

+0

@David:查看更新 – user187291 2010-12-12 19:24:28

1

使用array_fill与循环(假设$hours做到这一点是你的阵列:

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

不工作:(完全错过了小时订单 – Ryan 2010-12-12 19:12:36

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; 
+0

@ David,增加了您的范围要求! – shawnjan 2010-12-12 19:28:29

+0

谢谢,但如果最新的小时是00:00,那么它会是-10? – Ryan 2010-12-12 20:15:23