【问题标题】:Change the order of an array to match hours of day更改数组的顺序以匹配一天中的小时数
【发布时间】:2013-01-22 22:47:42
【问题描述】:

我有一个数组,其中列出了一天中的所有时间,0-23 如下所示:

[0] = 0  [1] = 1 [2] = 2 .... etc

然后我使用 date('G') 查找当前小时,例如 17。

我想要做的是重新排序我的数组,使其从下一个小时开始,18,然后是 19、20、21、22、23、0、1、2.. 等

最好的方法是什么?我正在将此数组提供给一个图表,该图表显示一段时间内的数据,并按此顺序排列确实会让事情变得更容易。

【问题讨论】:

  • 你在那个时间拼接它,然后把它移到前面。
  • 您正在尝试旋转一个数组。就是这样称呼的。见stackoverflow.com/questions/5601707/php-rotate-an-array
  • 你需要初始数组做什么?找到当前小时,然后直接生成你需要的最终数组。 $result = array_merge(range($currentHour, 23), $currentHour ? range(0, $currentHour - 1) : array())

标签: php arrays


【解决方案1】:

这应该可行:

$array = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23);

for($i = 0; $i < date("G"); $i++)
    array_push($array, array_shift($array));

print_r($array);

假设 date("G") 是 14,结果将是:

数组
(
    [0] => 14
    [1] => 15
    [2] => 16
    [3] => 17
    [4] => 18
    [5] => 19
    [6] => 20
    [7] => 21
    [8] => 22
    [9] => 23
    [10] => 0
    [11] => 1
    [12] => 2
    [13] => 3
    [14] => 4
    [15] => 5
    [16] => 6
    [17] => 7
    [18] => 8
    [19] => 9
    [20] => 10
    [21] => 11
    [22] => 12
    [23] => 13
)

【讨论】:

    【解决方案2】:
    function rearrangeHours(&$hours, $hour_key){
      $beforeNow = array_slice($hours,0,$hour_key+1);
      $afterNow = array_slice($hours,$hour_key+1);
      return $hours = array_merge($afterNow, $beforeNow);
    }
    

    那你就可以了

    $hours = range(0,23);
    rearrangeHours($hours, 15);
    

    【讨论】:

      【解决方案3】:

      我用InfiniteIteratorLimitIterator 找到了一个很好的解决方案。 您不需要更改数组。您可以直接使用迭代器。

      $array = range(0, 23);
      
      $start = date("G") + 1;
      $count = 24;
      
      $infinate = new InfiniteIterator(new ArrayIterator($array));
      $limit = new LimitIterator($infinate, $start, $count);
      

      然后你可以像数组一样使用$limit

      foreach ($limit as $value) {
          print($value . PHP_EOL);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多