2

ifステートメントの関数のいくつかの可能性に沿って文字列を作成し、それらを1つの変数にリンクして、機能する変数があればそれを返すことができるかどうか知りたいです。

以下は機能しませんが、それはアイデアを示しています。2関数が渡されたmyFn()ときにのみtrueを返すので、以下を返したいと思います。2

ただし、代わりに次のようになりますtrue: 1

if ($b = myFn(1) || $b = myFn(2) || $b = myFn(3)) {
    echo 'true: ' . $b;
} else {
    echo 'false: ' . $b;
}

function myFn($a) {
    if ($a == 2) return $a;
    return false;
}

一連のsを追加する以外に、成功したものだけを返しながらelseif、一連のsの関数を文字列化する方法はありますか?OR

コードパッド: http://codepad.org/ldiCxY4j

4

2 に答える 2

4

各割り当てを括弧で囲むだけです。

(($b = myFn(1)) || ($b = myFn(2)) || ($b = myFn(3)))

参照:PHP演算子の優先順位

論理演算子を使用する場合、PHPは結果をブール値に強制します。余分な括弧がないと、エコーがに強制される'1'ため、エコーtrue'1'ます。

ループを使用した方がよい場合があります。

/**
 * Get the first $array value that passes the $test, or else null.
 * @return mixed|null 
 */
function find ($array, $test) {
    foreach ($array as $index => $value) {
        if (call_user_func($test, $value, $index, $array))
            return $value;
    }
}
于 2013-02-28T05:37:21.150 に答える
2

このような割り当ての連結のために、PHPにはor演算子があります。これはと同じですが、 。よりも優先順位が低く||なります。この意味は=

if ($b = myFn(1) or $b = myFn(2) or $b = myFn(3))

次のように扱われます:

if (($b = myFn(1)) or ($b = myFn(2)) or ($b = myFn(3)))

その間

if ($b = myFn(1) || $b = myFn(2) || $b = myFn(3))

次のように扱われます:

if ($b = (myFn(1) || $b = (myFn(2) || $b = myFn(3))))
于 2013-02-28T06:19:36.370 に答える