2013-02-25 3 views
1

에 배열에서 조건 값을 사용.나는 조건의 배열은 경우 ... 문

IE.

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

어떤 도움 : 같은 것

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

...?

감사

+5

'eval'을 사용할 수는 있지만 속도가 너무 느려서 내게 들리지 않았습니다. 아니면, 소매를 감아 수동으로 할 수 있습니다.'switch ($ operator) {case '==': $ result = $ input == $ operand; }'등 – Jon

+0

왜 처음부터 이렇게하고 싶습니까? – Syjin

+0

그래, 수동으로 했어.하지만 더 우아한 솔루션이 있는지 궁금해하고 있었어. – ojsglobal

답변

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'; 
} 
?> 
2

이러한 요구 사항은 나쁜 디자인의 확실한 표시이다.
아마도 가장 일반적인 방법으로 할 수 있습니다.

그럼에도 불구하고 그런 일에는 절대로 평가 절대로 사용하지 마십시오.
최소한 각 연산자를 쌍으로 저장하십시오 - 연산자와 피연산자. 당신이 훨씬 더 쉬운 방법을 그 서로를 해결할 수있는 가장 가능성이 - 다시

list ($operator,$operand) = $arrConditions[0]; 
switch($operator) { 
    case '==': 
     $result = ($input == $operand); 
     break; 
    case '>=': 
     $result = ($input >= $operand); 
     break; 
    // and so on 
} 

그러나 :

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

한 다음 스위치를 사용하십시오.