私は条件の配列を持っています:
$arrConditions = array ('>=2', '==1', '<=10');
...if...ステートメントで使用できるようにしたい。
IE。
if (5 $arrConditions[0])
{
...do something
}
...これは:と同じになります
if (5 >= 2)
{
...do something
}
何か助けはありますか?
ありがとう
このような要件は、設計が悪いことの確かな兆候です。
ほとんどの場合、別の、より通常の方法でそれを行うことができます。
それにもかかわらず、そのようなことには決してevalを使用しないでください。
少なくとも、各演算子をペアで格納します-演算子とオペランド。
$arrConditions = array (
array('>=',2),
array('==',1),
array('<=',10),
);
次に、スイッチを使用します。
list ($operator,$operand) = $arrConditions[0];
switch($operator) {
case '==':
$result = ($input == $operand);
break;
case '>=':
$result = ($input >= $operand);
break;
// and so on
}
しかし、繰り返しになりますが、おそらく、別のはるかに簡単な方法で解決できます。
これはどうですか ?
<?php
$arrConditions = array('==2', '==9', '==5', '==1', '==10', '==6', '==7');
$count = 0;
$myval = 0;
foreach ($arrConditions as $cond) {
$str = "if(5 $cond) { return $count;}";
$evalval = eval($str);
if (!empty($evalval)) {
$myval = $count;
}
$count++;
}
switch ($myval) {
case 0: echo '==2 satisfied';
break;
case 1: echo '==9 satisfied';
break;
case 2: echo '==5 satisfied';
break;
case 3: echo '==1 satisfied';
break;
case 4: echo '==10 satisfied';
break;
default : echo 'No condition satisfied';
}
?>