2013-03-28 80 views
0

我知道這不是做這件事的方法,但我在嘗試使用條件語句設置變量時遇到了一些麻煩。PHP中的多個if語句

對於一些方面,$foo$foo_1$foo_2正在檢查,看是否有表單字段被設定,如果是,設置$bar等於伴隨各條件的計算。

if(isset($foo)) { 
    $bar = ($baz * 52) * ($qux); 
} 

if(isset($foo_1)) { 
    $bar = ($baz_1 * 12) * ($qux); 
} 

if(isset($foo_2)) { 
    $bar = ($baz_2 * $qux); 
} 

這是因爲現有的代碼使用$條在計算

$a = ($b/$bar) 

$a是在各種情況下進一步向下傳遞。

就這樣,只有第一個$foo條件恰當地通過$bar,所有其他條件$ bar輸出爲NULL。

編輯:爲了澄清上面的代碼(這是不正確的),並更新我下面的例子:

$foo = isset($form['first'] ? $form['first'] : ''; 
$foo_1 = isset($form['second'] ? $form['second'] : ''; 
$foo_2 = isset($form['third'] ? $form['third'] : ''; 
if(isset($foo)) { 
    $bar = ($foo * 52) * $qux; 
} 

if(isset($foo_1)) { 
    $bar = ($foo_1 * 12) * $qux; 
} 

if(isset($foo_2)) { 
    $bar = $foo_2 * $qux; 
} 

REVENT,奧斯瓦德和RoyalBG的建議指出,我的代碼沒有被正確設置變量,情況就是這樣。 $baz,$baz_1,$baz_2已被棄用且不存在,並替換爲$foo,$foo_1,$foo_2以伴隨其條件以獲得期望的輸入。一旦我清理了這個,我將使用一個switch語句,而不是我上面寫的。以下所有評論都非常有幫助感謝您的幫助。

+0

您正在成倍增長,不需要括號。另外,請記住這些「if」不是互斥的。 – fedorqui

+0

你還沒有顯示出足夠的代碼讓我真的有所幫助,但是從我所看到的,我可以說幾乎可以肯定你的代碼可以寫得更好。在http://codereview.stackexchange.com/ – Spudley

+0

上尋求改進代碼的幫助可能會使您受益。更新後的示例給出了一個分析錯誤。 – Oswald

回答

1

$foo_1$foo_2從未設置。這就是爲什麼如果$foo沒有設置,$bar也不會設置。

0

請澄清你的代碼,因爲我沒有看到你的$ baz_1變量的狀態以及它在哪裏初始化?

由於邏輯說,你必須在$ qux乘以$ FOO_1我不知道你在$ baz_1的意思,$ baz_2變量

然後,如果你正在測試$ FOO_1,$ FOO_2你必須使你的計算基礎上的測試變量不是一個新的變量,可能它沒有設置

更多解釋如果設置$ foo,$ foo_1,$ foo_2但$ baz,$ baz_1,$ baz_2不是設置我沒有看到$ baz變量的任何操作,請澄清情況。

0

如果你的病情的代碼沒有傳遞到PHP引擎,當你問的變量設置,那麼它很可能不成立......你也可以用開關/ case塊嘗試

0

奧斯瓦爾德和皇家Bg是正確的,你的變量可能永遠不會被設置。我會這樣寫的代碼(假設你允許$巴茲零值和$ qux變量):

$bar = 0; // initialize the variable so it won't be null 
if(isset($foo) && isset($baz) && isset($qux)) { 
    $bar = ($baz * 52) * ($qux); 
} 
else if(isset($foo_1) && isset($ba_1z) && isset($qux)) { 
    $bar = ($baz_1 * 12) * ($qux); 
} 
else if(isset($foo_2) && isset($baz_2) && isset($qux)) { 
    $bar = ($baz_2 * $qux); 
} 

可以使用空()函數,該函數返回true,則檢查$酒吧的價值如果該值爲空,零或空字符串。