2

いくつかの文字列があるとします。PHP で論理演算を使用できるようにするには、どのように変換すればよいでしょうか? それは可能ですか?

例:欲しい

"x=1"&&"x=0"

戻るfalse

4

4 に答える 4

6

序章

文字列に論理演算子 &&代入演算子の両方があり、文字列=に論理演算子がある代入を評価したいことに気づきました。どうやってここにたどり着いたのか本当にわかりませんが、これはvery wrong教育目的のタグです

壊す

"x=1"  &&  "x=0" = False 
  ^    ^     ^
  |    |     | 
       |     |
X == 1 |     |
       |     |
      AND    |
             |
           X == 0

上記の式は、 toと同時にすることはできないfalseため、常にXequal01

このような評価を行えるようにするにはPHP、独自の関数を作成する必要があります。たとえばlogicalString 、式を次のように評価しlogicalString("x=1")たり、logicalString("x=0")

予測

$x = 1; // Imagine value of X 

例 1 &&

// Start Evaluation with &&
if (logicalString("x=1") && logicalString("x=0")) {
    echo "&& - True\n";
} else {
    echo "&& - False\n";
}

出力 1

&& - False 

例 2 - ||

// Start Evaluation with ||
if (logicalString("x=1") || logicalString("x=0")) {
    echo "|| - True\n";
} else {
    echo "|| - False\n";
}

アウトプット 2

|| - True

使用される機能 (本番環境では使用しない理由を参照)

function logicalString($str) {
    parse_str($str, $v);
    foreach ( $v as $k => $var ) {
        if (! isset($GLOBALS[$k]) || $GLOBALS[$k] != $var)
            return false;
    }
    return true;
}

PHP 4.3.0 - 5.5.0alpha3 のオンライン デモを見る

于 2013-01-13T21:45:36.727 に答える
2

これを使用できます:

//Returns True if strings are equal, false otherwise
(bool)!strcmp($str1, $str2);

それを関数にラップすると、準備完了です。

于 2013-01-20T06:15:49.620 に答える
2

あなたのタスクを達成するための最良の方法は、次のようなカスタム関数トラフeval()メソッドを使用することだと思います:

<?php
function checkValues($var1, $var2) {
    if ($var1==1 && $var2==1) {
        echo "Both values are equal to 1";
    } else {
        echo "At least one value is not equal to 1";
    }
}

$x = 1;
$y = 1;
$z = 2;
$z3 = 1;

eval("checkValues($x, $y);"); // Both values are equal to 1
eval("checkValues($x, $z);"); // At least one value is not equal to 1

/* The eval parameter is a string so you can play with it.
 * Don't forget the semicolon ";";
 */
eval("checkValues($x, $z" . 3 . ");"); // Both values are equal to 1
?>
于 2013-01-17T17:33:07.607 に答える
2

与えられた情報で、何が起こっているのか説明させてください。

if("x=1"&&"x=0")
{
  echo "true";
}
else 
{
  echo "false";
}

出力します

true

あなたが達成しようとしていることは有効ではありません。文字列は論理式ではありません。論理式は、1 つ以上の論理演算子と、論理オペランド、数値オペランド、または関係オペランドで構成されています。続きを読む

上記のコードは以下と同じです

if("string1" && "string2")
{
  echo "true";
}
else 
{
  echo "false";
}

単純に、そこに何があるかは気にしません。気にするのは、空ではない2つの文字列があることだけです。

if("" && "")
{
  echo "true";
}
else 
{
  echo "false";
}

上記は戻りfalseます。

結論

文字列は常に文字列であり、論理演算子ではありません。

于 2013-01-13T18:12:08.507 に答える