2017-09-21 55 views
0

試圖根據php時間獲得正確的漸變顏色。當我嘗試時,梯度不匹配(I.E. topcolor從第一小時塊和bottomcolor從第四小時塊塊匹配)。PHP基於時間的漸變背景

<?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> 
+1

您需要使用大括號*要包含你的條件塊。 'if(...){code}'。你也應該考慮使用else if。 – Devon

+0

你還有其他一些問題,沒有什麼比6和大於24.雖然'06 == 6',你不應該習慣在整數上加0作爲前綴,因爲'016 == 14',前綴爲0時使用的是八進制數。 – Devon

+0

將06更改爲6,將最後一次的24替換爲0.還爲每個條件添加了括號。你認爲這些代碼可以正常工作嗎?我很擔心從<24 to > = 0開關---將背景開關看起來沒有? – Qwerty

回答

1

你需要用每個if條件後的聲明中括號:

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

- >

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

如果忽略這些,那麼只有第一條語句進行評估。請參閱http://php.net/manual/en/control-structures.if.php

最後一個$bottomcolor生效的原因是無論$time值如何,所有對該變量的分配都正在運行,並且最後一個優先。

0

你可以從documentationif語句看起來象學:

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';)生成的值。

這是recommended始終使用塊爲ifelseelseif/elsewhiledo-whileforforeachcontrol structures報表,即使它們只包含一個聲明。通過這種方式,程序員更容易閱讀和理解代碼。它對編譯器沒有任何影響。

回到你的代碼,你可以通過使用elseif語句簡化測試:

$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'; 
}