1

私は条件の配列を持っています:

$arrConditions = array ('>=2', '==1', '<=10');

...if...ステートメントで使用できるようにしたい。

IE。

if (5 $arrConditions[0])
{
  ...do something
}

...これは:と同じになります

if (5 >= 2)
{
  ...do something
}

何か助けはありますか?

ありがとう

4

2 に答える 2

2

このような要件は、設計が悪いことの確かな兆候です。
ほとんどの場合、別の、より通常の方法でそれを行うことができます。

それにもかかわらず、そのようなことには決して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
}

しかし、繰り返しになりますが、おそらく、別のはるかに簡単な方法で解決できます。

于 2013-02-25T12:49:25.093 に答える
0

これはどうですか ?

<?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';
}
?> 
于 2013-02-25T13:19:34.127 に答える