2012-08-16 96 views
-3

如何根據其他條件將一個變量設置爲true。在這裏,而不是做根據條件將一個變量設置爲true

if ($vara && $varb && $varc) 

我就像下面的東西。問題是,我只是沒有得到正確的東西。你能幫我麼?

<?php 

$onward = false; 

$vara = 11; 
$varb = 21; 
$varc = 3; 

if ($vara == 1) 
{$onward = true;}else{$onward = false;} 

if ($varb == 2) 
{$onward = true;}else{$onward = false;} 

if ($varc == 3) 
{$onward = true;}else{$onward = false;} 

if ($onward) 
{ 
echo "Ok"; 
}else {echo "Not ok";} 

?> 
+0

只有最後一次檢查實際上是設置值 - 早期if語句的結果被覆蓋 – andrewsi 2012-08-16 16:08:26

+4

爲什麼會你想要這樣做,而不是第一種方法?它相當於同一件事 - 它更加臃腫。 – Utkanos 2012-08-16 16:08:56

+2

我們只能猜測你實際需要的條件是什麼。請用文字表達。 – deceze 2012-08-16 16:10:19

回答

4

每個忽略了以前的狀態的結果。您需要包括在以後的每個測試的$onward以前的狀態:

if ($vara == 1) 
{$onward = true;}else{$onward = false;} 

if ($varb == 2 && $onward) 
{$onward = true;}else{$onward = false;} 

if ($varc == 3 && $onward) 
{$onward = true;}else{$onward = false;} 

這樣,varbvarc如果$onward仍然是先前的測試之後真只能測試。

這是編寫代碼的特別醜陋的方式。如果你有三個大的條件,你不只是想加入他們一行在你$vara && $varb && $varc,你應該寫這樣說:

$onward = ($vara == 1) 
$onward = $onward && ($varb == 2); 
$onward = $onward && ($varb == 3);  

任何時候你只是返回/設置的東西如果您的if語句在分支中爲真/假,您應該只是返回/設置條件本身。

也就是說,這樣的:

if (condition) { 
    return true; 
} else { 
    return false; 
} 

應該總是這樣寫:

return condition; 
+0

謝謝。我決定使用你的第一個解決方案。效果很好。 – Norman 2012-08-16 16:26:46

1

這樣做的更好的辦法:

if ($vara == 1) {$onward = true;} else {$onward = false;} 

是這樣的:

你的條件
$onward = ($vara == 1); 
3

我認爲你正在尋找:

$onward = $vara == 1 || $varb == 2 || $varc ==3; 

$onward = $vara == 1 && $varb == 2 && $varc == 3; 

取決於你的目標。


有了這個:

if ($varc == 3) 
{$onward = true;}else{$onward = false;} 

$onward永遠是false如果$varc不是3

4

的問題是,你在每一個if語句來覆蓋的$onward值。只需使用

$onward = $vara == 1 && $varb == 2 && $varc == 3; 
2

我敢肯定,你的意思是

if (($vara == 1) && ($varb == 2) && ($varc == 3)) 
{$onward = true;}else{$onward = false;} 

甚至

$onward = (($vara == 1) && ($varb == 2) && ($varc == 3)); 
0

你覆蓋每一次相同的變量,所以前兩個條件實際上是毫無意義的。

我不知道爲什麼你要做到這一點在第一,更簡潔的方法,這將具有相同的邏輯效果:

if ($varc ==== 1 || $varc === 2 || $varc === 3) 
    $onward = true; 
else 
    $onward = false; 

甚至只是:

$onward = $varc === 1 || $varc === 2 || $varc === 3; 

還要小心。在比較中,數據被強制爲它們的真/假等價物,因此在比較== 1時,任何真值都將解析爲真。要測試某些字面上是1,請使用===。 (一般情況下,這是一條很好的規則,除非你知道你明確地想要測試值而不是鍵入。)

+1

它是「或」還是「和」? – 2012-08-16 16:12:09

+0

*「如果'$ varc' super等於'1'」*? – deceze 2012-08-16 16:13:31