2017-09-08 29 views
1

我希望代碼1與代碼2的工作方式相同,但它不會。如何使用變量作爲操作符?

<?php 
//code 1 
$z = '>'; 
$v = 50; 
$a1[0] = 60; 

if($v .$z. $a1[0]) 
{ 
    echo "<td>" . "test" . "</td>"; 
} else {} 

//code 2 
if($v > $a1[0]){ 
    echo "<td>" . "test" . "</td>"; 
} else {} 

在上面的代碼中,我想用變量替換>符號,這樣我就可以使它變爲動態的。

我該怎麼做?

+1

只是不要......不要那樣做......你可以使用類似'eval',http://php.net/manual/en/function.eval.php,但請仔細閱讀注意事項。 – Hackerman

+0

我已經檢查過,看起來這將是diffucult以暗示我的邏輯任何其他方式@ Hackerman –

+1

你可以發佈你的實際用例是什麼?這似乎不是對任何問題的明智解決方案。 – iainn

回答

6

基本上,你不能在PHP中使用變量作爲運算符。

$v .$z. $a1[0]表達式所做的就是將變量連接成一個字符串。

我認爲最接近能夠使用「動態操作符」的就是定義一個可以使用變量進行選擇的操作數組。

$ops = [ 
    '>' => function($a, $b) { return $a > $b; }, 
    '<' => function($a, $b) { return $a < $b; }, 
    '=' => function($a, $b) { return $a == $b; } 
]; 

$z = '>'; 

$v = 50; 

$a1[0] = 60; 

if ($ops[$z]($v, $a1[0])) { 
    echo "<td>" . "test" . "</td>"; 
} 

(請記住,你的榜樣值,$v$a1[0]更大,所以這個例子也不會迴應任何東西。)


關於eval,因爲它被提及在你的問題的評論中有幾次,大多數人建議不要使用它,原因很多。幾乎總是有更好的方法來解決你的問題。

+0

真棒!!!!!!!!有效 –