PHP печатать каждый второй час? - PullRequest
0 голосов
/ 03 февраля 2012

Есть ли более простой / лучший способ получить каждый второй час, чем этот

if(date("H")=='00'){$chart_updates = '|02|04|06|08|10|12|14|16|18|20|22|00';}
if(date("H")=='01'){$chart_updates = '|03|05|07|09|11|13|15|17|19|19|23|01';}
if(date("H")=='02'){$chart_updates = '|04|06|08|10|12|14|16|18|20|21|00|02';}
if(date("H")=='03'){$chart_updates = '|05|07|09|11|13|15|17|19|21|23|01|03';}
if(date("H")=='04'){$chart_updates = '|06|08|10|12|14|16|18|20|22|00|02|04';}
if(date("H")=='05'){$chart_updates = '|07|09|11|13|15|17|19|21|23|01|03|05';}
if(date("H")=='06'){$chart_updates = '|08|10|12|14|16|18|20|22|00|02|04|06';}
if(date("H")=='07'){$chart_updates = '|09|11|13|15|17|19|21|23|01|03|05|07';}
if(date("H")=='08'){$chart_updates = '|10|12|14|16|18|20|22|00|02|04|06|08';}
if(date("H")=='09'){$chart_updates = '|11|13|15|17|19|21|23|01|03|05|07|09';}
if(date("H")=='10'){$chart_updates = '|12|14|16|18|20|22|00|02|04|06|08|10';}
if(date("H")=='11'){$chart_updates = '|13|15|17|19|21|23|01|03|05|07|09|11';}
if(date("H")=='12'){$chart_updates = '|14|16|18|20|22|00|02|04|06|08|10|12';}
if(date("H")=='13'){$chart_updates = '|15|07|19|21|23|01|03|05|07|09|11|13';}
if(date("H")=='14'){$chart_updates = '|16|08|20|22|00|02|04|06|08|10|12|14';}
if(date("H")=='15'){$chart_updates = '|17|09|21|23|01|03|05|07|09|11|13|15';}
if(date("H")=='16'){$chart_updates = '|18|20|22|00|02|04|06|08|10|12|16|16';}
if(date("H")=='17'){$chart_updates = '|19|21|23|01|03|05|07|09|11|13|15|17';}
if(date("H")=='18'){$chart_updates = '|20|22|00|02|04|06|08|10|12|14|16|18';}
if(date("H")=='19'){$chart_updates = '|21|23|01|03|05|07|09|11|13|15|17|19';}
if(date("H")=='20'){$chart_updates = '|22|00|02|04|06|08|10|12|14|16|18|20';}
if(date("H")=='21'){$chart_updates = '|23|01|03|05|07|09|11|13|15|17|19|21';}
if(date("H")=='22'){$chart_updates = '|00|02|04|06|08|10|12|14|16|18|20|22';}
if(date("H")=='23'){$chart_updates = '|01|03|05|07|09|11|13|15|17|19|21|23';}

Мне нужно это для диаграмм Google, и я хотел проверить, глуп ли этот способ.

Ответы [ 5 ]

4 голосов
/ 03 февраля 2012

1) принять текущий час

2) mod2 (есть только два разных набора чисел, нечетные и четные)

3) построить массив часов

4) отсортировать массив по значению

5) разделить массив, где был исходный час, и рекомбинировать.

1 голос
/ 03 февраля 2012
$h = date("H");
$line = '';
for($i=0; $i<=24; $i++)
{
    if($i % 2 == $h % 2)
        $line .= '|' . ($i < 10 ? '0'.$i : $i);
}
1 голос
/ 03 февраля 2012

Один из способов - создать массив с ключами:

$theHour['00'] = '|02|04|06|08|10|12|14|16|18|20|22|00';

Затем вы можете назвать его так:

$chart_updates = $theHour[date("H")];

Возможно, есть и лучший способ создать это., но так как вы уже напечатали его, он там .. Это было бы просто отстой, если вы хотите внести изменения.

0 голосов
/ 08 июня 2013
    function helper_add($h,$plus=0){
        if($h+$plus > 23){
            return $h+$plus-24;
        }
        return $h+$plus;
    }
    function helper_10($in){
        return $in < 10 ? '0'.$in : $in;
    }
    function getchartupdates(){
        $now = date('G');
        for($i=($now%2==0?0:1); $i<=24 ;$i+=2)
            $res[] = helper_10(helper_add($now,$i));
        return '|'.implode('|',$res);
    }

использовал это , чтобы проверить это!

0 голосов
/ 03 февраля 2012

Хороший код:)

На самом деле гораздо проще сделать это в php:

$chars = array();
$start = date("H")+2;
for( $i = 0; $i < 12; $i++){
    $chars[] = str_pad( ($start+2*$i)%24, 2, '0', STR_PAD_LEFT);
}

$chart_updates = '|' . implode( '|', $chars);
...