web-dev-qa-db-ja.com

なぜPHPでストリップをチェックするために!== FALSEを使用するのですか?

これが私が見ているコードです。

_foreach ($header as $idx => $field) {
    if (stripos($field, 'foo') !== false) {
        $cols['foo'] = $idx;
    } else if (stripos($field, 'bar') !== false) {
        $cols['bar'] = $idx;
    } else if (stripos($field, 'brr') !== false) {
        $cols['brr'] = $idx;
    } else if (stripos($field, 'ffo') !== false) {
        $cols['ffo'] = $idx;
    }
}
_

申し訳ありませんが、コードをきれいにフォーマットする方法もわかりません。そのためのヒントをいただければ幸いです。

私は自分よりはるかに賢い人によって書かれたコードを見ているので、すべてをif(stripos($foo))に変更するだけの第一印象を信頼する傾向はありませんが、なぜこのようにするのですか?

18
jergason

答えは、PHP "false"値は、空の配列、空の文字列、NULL、整数0などの少数の値で満たすことができるということです。空を参照してください。 ()完全なリストの関数ページ:

http://php.net/empty

したがって、これは常に誤った結果をもたらします:

if(strpos("abc", "a")) { 
  echo "Yes";
} else {
  echo "No";
}

「a」は最初の位置(インデックス0)で発生するため、PHPは「if(0)」をfalseと見なします。

Strposが干し草の山で針を見つけられない場合、ブール値のFALSEが返されます。これは、型と値の両方をチェックするトリプルイコール演算子でチェックしたいものです。比較演算子に関するドキュメントを参照してください

http://www.php.net/manual/en/language.operators.comparison.php

50
Cody Caughlan

stripos は別の文字列内の文字列の位置を返し、文字列が見つからない場合はfalseを返すため、IDを使用することをお勧めします 比較演算子 (===、 !==)、PHPは0を「偽の」値と見なすため、次の例を検討してください。

// Find the position of the 'a' character in the 'abc' string:
stripos('abc', 'a') !== false; // true, position is 0
stripos('abc', 'a') != false; // false, 0 is "falsy"
7
CMS

文字列が位置0で一致した場合、0はfalseと評価されるため、タイプが考慮されるように、必ず余分な「=」を追加してください。

strpos()[〜#〜] no [〜#〜]の一致が見つかった場合、falseを返します。

チェックアウト 比較演算子

5
matpie

PHPでは、!==は同じタイプのAND値ではないことを意味します。

Stripos()がfalse以外(および正確には 'false'であり、ゼロではない)を返す場合、位置が0でint(0)が返されたとしても、何かが見つかったことを意味します。 ==との標準比較を行う場合、0とfalseは等しくなりますが、ID ===演算子を使用する場合は等しくないため、stripos()が確かに何かが見つかったのは、!==を使用してfalseの値と型を比較す​​ることです(同一ではありません。つまり、strpos()の戻り値の型と値が同じです)。

5
karim79

このようなものが維持するのがより簡単であるならば、Dunno。あなたがそれらのif条件で何か他のことをするかどうかに依存します。ただし、構成ファイル、db、関数への引数として渡すなどでキーを設定できます。

$keys = array(
    'foo',
    'bar',
    'brr',
    'ffo',
);
foreach ($header as $idx => $field) {
    foreach ($keys as $key) {
        if (stripos($field, $key) !== false) {
            $cols[$key] = $idx;
            break;
        }
    }
}
3
OIS