【问题标题】:Fill in absent elements in an array填充数组中缺少的元素
【发布时间】:2010-12-12 19:03:35
【问题描述】:

我有一个代码可以在最近 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");

谢谢!

【问题讨论】:

    标签: php arrays date time


    【解决方案1】:
    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;
    

    【讨论】:

    • 嗨,谢谢,但我认为这会填满 24 小时范围,我只需要最近的 10 小时
    • ...所以找出“最近 10 小时”的“范围”是什么,而不是循环。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      使用过去 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;
      

      【讨论】:

      • @David,添加了您的范围要求!
      • 谢谢,但是如果最近的时间是 00:00,那会是 -10 点吗?
      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多