2013-01-22 82 views
0

小時我列出具有所有的一天中的小時的陣列,0-23是這樣的:更改數組的順序匹配

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

然後我用日期(「G」 )找到當前小時,例如,17.

我想要做的是重新排序我的數組,以便它從下一個小時開始,18,然後是19,20,21,22,23,0, 1,2 ..等

這樣做的最好方法是什麼?我將這個數組提供給一個顯示數據的圖表,並按照這個順序讓事情變得更容易。

+0

您在當時拼接它,然後將其移動到前面。 – Kermit

+0

你需要什麼初始數組?查找當前小時,然後直接生成您需要的最終數組。 '$ result = array_merge(range($ currentHour,23),$ currentHour?range(0,$ currentHour - 1):array())' – Jon

+0

你正在嘗試**旋轉**一個數組。這就是它的名字。請參閱http://stackoverflow.com/questions/5601707/php-rotate-an-array – Rygu

回答

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

這應該工作:

$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

我找到了與很好的解決方案和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); 
}