2012-08-24 122 views
4

我想在if條件中動態添加條件。但它不起作用。請幫我解決這個問題。在php中動態添加條件如果條件

我想要一個像這樣的代碼

$day_difference = "some integer value"; 

    if(sheduled_time == 'evening'){ 
     $condition = '>'; 
    }else{ 
     $condition = '=='; 
    } 

然後

if($day_difference.$condition. 0){ 
    echo "something";  
}else{ 
    echo "h"; 
} 
+0

解決了這個尼斯認爲,但它不這樣工作:D –

回答

4

你需要的是eval()方法。

I.e.

$var1 = 11; 
$var2 = 110; 
$cond1 = '$var1 > $var2'; 
$cond2 = '$var1 < $var2'; 

if(eval("return $cond1;")){ 
    echo $cond1; 
} 

if(eval("return $cond2;")){ 
    echo $cond2; 
} 

作爲公正的注意之下,你應該使用這種方法時可以行使必要的預防措施!

+4

'eval()lan guage構造非常危險,因爲它允許執行任意PHP代碼。因此不鼓勵它的使用。如果您已仔細覈實沒有其他選擇而不是使用此構造,請特別注意不要將任何用戶提供的數據傳遞給它,而事先未經適當驗證。「 –

+0

請注意,這是非常危險的。 – Daniel

+0

'如果eval()是答案,那麼你肯定會問錯誤的問題嗎?-Rasmus Lerdorf –

5

替代傑拉爾德的解決方案;我建議你使用一個函數來驗證使用開關箱操作的輸入:

function evaluate ($var1, $operator, $var2) 
{ 
    switch $operator 
    { 
     case: '<': return ($var1 < $var2); 
     case: '>': return ($var1 > $var2); 
     case: '==': return ($var1 == $var2); 
    } 
    return null; 
} 
+1

+1好的建議 –

3

這不是這樣做的。
只需定義一個函數返回true如果滿足所需的條件。根據您的要求這可以用做

if(decide($day_difference, $scheduled_time)) 
{ 
    echo "something";  
} 
else 
{ 
    echo "h"; 
} 
1


例如,我們可以定義它接收兩個參數,$day_difference$scheduled_time功能decide

function decide($day_difference, $scheduled_time) 
{ 
    if($scheduled_time == 'evening') 
    { 
     return $day_difference > 0; 
    } 
    else 
    { 
     return $day_difference == 0; 
    } 
} 

並使用它像這樣PHP eval()功能,我不建議只在必要時使用它。

,您可以檢查When is eval evil in php?

您可以使用以下腳本:

if( $sheduled_time == 'evening' && $diff > 0) 
{ 
    echo "This is the Evening and the Difference is Positive"; 
} 
else if($diff == 0) 
{ 
    echo "This is not evening"; 
} 
0

三江源幫助我解決我的問題

我以另一種方式

$day_difference = "some integer value"; 

$var1 = false ; 
if($sheduled_time == 'evening_before'){ 
    if($day_difference > 0){ 
     $var1 = true ; 
    } 
}else{ 
    if($day_difference == 0){ 
     $var1 = true ; 
    } 
} 

if($var1 === true){ 
    echo "something";  
}else{ 
    echo "h"; 
}