2016-10-22 24 views
0

私は2つの配列を持っています。最初に変数名が含まれ、2番目にfloat値と、データ型varcharのMySQLテーブルから抽出された条件が含まれます。今私はこれらの名前と値をif文で使いたいと思う。出来ますか?コードを説明しましょう。if条件がPHPの配列にある条件文

for ($i=0; $i<5; $i++) { 
    if ($_POST[$names[$i]] $val[$i]) { 
     echo "Do something"; 
    }      
} 

$名=配列(NAME1、NAME2、NAME4)
$ valを=配列(< 121.5、< = 88.9、> 77.3)

私は間の論理比較を実行したいですこれらの2つの演算子と比較演算子は、配列に値が格納されています。 if文では不可能な場合。親切に私にそれを行うための他の方法をお勧めします。ありがとう!

+0

はい、* *コードを説明するようにしてください。あなたは正確に何をしようとしていますか?値を比較したいですか?それらの間に比較演算子を配置します。 –

+0

この奇妙なアプローチで実際に何を達成したいのかは不明です。 – arkascha

+0

あなたが望むレコードだけを得るように、私はあなたのクエリの値を使用したいと思います。しかし質問はより明確にする必要があります。 – chris85

答えて

0

私はそれを他の方法で行うことをお勧めします。私はそれがクレイジーに見えるけど、それはあなたの問題を解決します:)

$names = array (name1, name2, name4); 
$val = array (array('bigger',121.5), array('smaller_even',88.9),array('smaller',77.3)); 

for ($i=0; $i<5; $i++){ 
    switch ($val[$i][0]){ 
     case: 'bigger': 
     if($name[$i]>$val[$i][1]){ 
      echo 'do something'; 
     } 
     break; 
    } 
} 
+0

これはMySQLのテーブルから取得するルールであり、各属性には、すべての属性に値と比較演算子が格納されています。だから私はこれで演算子を置き換えることはできません。 – tooba

+1

したがって、データベースに最初に格納されている場合は、比較のタイプを確認する必要があります。あなたはstrpos()を使ってやってみることができます(より長いバージョン - "<=" and "> ="を最初にチェックすることを思い出してください)。 if(strpos($ val [$ i]、 '<=')!== false){echo 'do something'} elseif(...) –

0

ここでアイデアです:

まず、あなたの比較配列$valに、この正規表現を使用します。今すぐ

preg_match('/([^\d]+)(\d+)/', $val[$i][0], $match); 

は、あなたが比較演算子は$match[1]、比較対象の番号は$match[2]です。次に、いくつかのifまたはスイッチを使用して比較演算子を確認し、通常のif節を使用します。例えば

if ($match[1] === '<=') { 
    if ((int)$match[2] <= $_POST[$names[$i]]) { 
     //do something 
    } 
} elseif ($match[1] === '>') { 
    if ((int)$match[2] > $_POST[$names[$i]]) { 
     //do something else 
    } 
} 
+0

これを詳しく教えてもらえますか? – tooba

+0

@tooba確かに、私は例を追加しました。 – Schlaus