PHP基于时间的渐变背景

时间:2017-09-21 16:40:06

标签: php

尝试根据php时间显示正确的渐变颜色。当我尝试它时,渐变不匹配(I.E. topcolor从第一小时块和底色从第四小时块块匹配在一起)。

<?php 
$time = date("H"); 
if( $time >= 06 && $time < 12 )
$topcolor = 'black';
$bottomcolor = 'orange';
if( $time >= 12 && $time < 18 )
$topcolor = 'pink';
$bottomcolor = 'purple';
if( $time >= 18 && $time < 24 )
$topcolor = 'yellow';
$bottomcolor = 'blue';
if( $time >= 24 && $time < 6 )
$topcolor = 'red';
$bottomcolor = 'green';
?>

<style>
body {
background: <?php echo $bottomcolor;?>;
background: -webkit-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: -o-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: -moz-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background-repeat: no-repeat;
}
</style>

2 个答案:

答案 0 :(得分:1)

您需要在大括号中的每个if条件之后包装语句:

if( $time >= 06 && $time < 12 )
$topcolor = 'black';
$bottomcolor = 'orange';

- &GT;

if( $time >= 06 && $time < 12 ) {
  $topcolor = 'black';
  $bottomcolor = 'orange';
}

如果省略这些,则仅评估第一个语句。见http://php.net/manual/en/control-structures.if.php

上一个$bottomcolor生效的原因是,无论$time值是什么,该变量的所有赋值都在运行,最后一个赋值优先。

答案 1 :(得分:0)

您可以从documentation if语句中了解到:

if (expression) 
    statement

关于statements

  

语句可以是赋值,函数调用,循环,条件语句,甚至是不执行任何操作的语句(空语句)。声明通常以分号结尾。此外,通过使用花括号封装一组语句,可以将语句分组到语句组中。声明组本身也是一种声明。

根据我们刚刚获得的新智慧,你的代码与此相同(缩进无关紧要,只有美容):

$time = date("H"); 
if ($time >= 06 && $time < 12)
    $topcolor = 'black';
$bottomcolor = 'orange';
if ($time >= 12 && $time < 18)
    $topcolor = 'pink';
$bottomcolor = 'purple';
if ($time >= 18 && $time < 24)
    $topcolor = 'yellow';
$bottomcolor = 'blue';
if ($time >= 24 && $time < 6)           // <--- this condition is impossible
    $topcolor = 'red';
$bottomcolor = 'green';

正如您所看到的,无论$time的值是多少,$bottomcolor的值都会更改为'orange',然后更改为'purple',依此类推,并且每次最后都是$bottomcolor = 'green'; value是最后一个赋值($time = date('H'); if ($time < 6) { // night $topcolor = 'red'; $bottomcolor = 'green'; } elseif ($time < 12) { // morning $topcolor = 'black'; $bottomcolor = 'orange'; } elseif ($time < 18) { // afternoon $topcolor = 'pink'; $bottomcolor = 'purple'; } else { // evening $topcolor = 'yellow'; $bottomcolor = 'blue'; } )生成的值。

recommended始终对ifelseelseif/elsewhiledo-while,{{ 3}}和for foreach,即使它们只包含一个语句。这样,程序员就可以更容易地阅读和理解代码。它对编译器没有任何影响。

回到您的代码,您可以使用control structures语句简化测试:

{{1}}