0

次のように、1日のすべての時間を0〜23でリストした配列があります。

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

次に、date('G') を使用して、現在の時間 (17 など) を見つけました。

私がやりたいことは、配列を並べ替えて、次の時間、18、次に 19、20、21、22、23、0、1、2.. などで始まるようにすることです。

これを行う最善の方法は何ですか?この配列を時間の経過に伴うデータを表示するチャートにフィードしていますが、この順序で並べると本当に簡単になります。

4

3 に答える 3

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);

14と仮定するとdate("G")、結果は次のようになります。

配列
(
    [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
)
于 2013-01-22T22:56:24.420 に答える
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);
}
于 2013-01-22T23:46:58.037 に答える
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);
于 2013-01-22T23:02:38.723 に答える