我有一个列出了当天所有小时的数组,0-23是这样的:
[0] = 0 [1] = 1 [2] = 2 .... etc
然后我使用日期('G')来查找当前小时,例如17。
我想要做的是重新排序我的数组,使其从下一个小时18开始,然后是19,20,21,22,23,0,1,2 ......等等。
最好的方法是什么?我正在将这个数组提供给一个图表,该图表显示了随时间变化的数据,按此顺序显示数据会使事情变得更容易。
答案 0 :(得分:2)
这应该有效:
$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,结果为:
Array ( [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 )
答案 1 :(得分:1)
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);
答案 2 :(得分:1)
我找到了InfiniteIterator
和LimitIterator
的精彩解决方案。
您无需更改阵列。您可以直接使用迭代器。
$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);
}