web-dev-qa-db-ja.com

PHP:3つの変数が等しいかどうかのテスト

私はこれに遭遇したことがありませんが、3つの変数が同じかどうかをどのようにテストしますか?以下は、明らかに機能しませんが、以下を書くためのエレガントな(そして正しい)方法を考えることはできません。

if ($select_above_average === $select_average === $select_below_average) { }

38
Matty
if ((a == b) && (b == c)) {
   ... they're all equal ...
}

推移的関係

63
Marc B
$values = array($select_above_average, $select_average, $select_below_average);

if(count(array_unique($values)) === 1) {
    // do stuff if all elements are the same
}

それを行う別の方法でしょう。

23
PeeHaa
if ($select_above_average === $select_average
    && $select_average === $select_below_average) { }
9
Dogbert

あなたはすでにアダムによる答えを持っていますが、これを正しく行う方法を覚える良い方法は、単一の検証で()括弧でラップする必要があることを覚えておくことです。 if ステートメントによって提供されます。

例:

if a === b

そしてあなたが複数をしているなら

if(a === b && c === d

中括弧のすべてのセットが検証チェックであることを覚えている場合は、次のようにログインできます。

if(((a === b || c === d)) && e === f

ifステートメントと他の多くの論理演算が階層で機能するため、チェック内の個々のチェックの量が親チェックに影響します。

上記の3番目の例では、a === bまたはc === dが失敗した場合、ab [cd]が中括弧で囲まれ、返されてチェックされるため、e === fはチェックされません。

これがもう少しお役に立てば幸いです。

5
RobertPitt

3つの配列の項目の数がこのシナリオと同じかどうかを確認する必要があるという独特の状況がありました。

これは私が思いついたものです:

(フィールド、演算子、値はすべて配列であると想定)

$allfieldscount = array(count($fields), count($operators), count($values)); //store an array of the count of all the arrays.

$same = array_count_values($allfieldscount);//returns an array by values in the array.  We are looking to see only 1 item in the array with a value of 3.

if(count($same) != 1){
    //Then it's not the same
}else{
   //Then it's the same
}

この戦術は、異なる配列のフィールドをカウントし、それらがすべて同じである場合にarray_count_valuesを使用することにより、返される配列のカウントは「1」となり、それ以外の場合は同じではありません。 php.netでarray_count_valuesを調べて、その動作を詳しく理解してください。

1
Joseph Astrahan