0

as という配列がありmyArrます。文字列と整数が含まれます。

0  st ts 0  0
st 0  0  0  0

PHP スクリプトのデバッグには、Zend Studio を使用しています。デバッグ ウィンドウには、acell [0][0]に int 0 が含まれていると表示されます。しかし、問題は、IF ステートメントが TRUE を返すことです。

        for ($i = 0; $i < $rows; $i++) {
          for ($j = 0; $j < $cols; $j++) {
            if ($myArr[$i][$j] == 'ts' || $myArr[$i][$j] == 'st') {
                $num++;
            }
          }
        }

更新: Zend Studio のデバッグ モードでコードを実行しています。したがって、反復ごとに $num が増加していることがわかります。また、カーソルがループ内に入ることもわかります

4

3 に答える 3

8

0 == 'ts'ですのでtrue。等価比較を使用する必要があります===。それ以外の場合、PHP の型ジャグリングにより、このステートメントは に評価されtrueます。

if ステートメントが に評価される理由を示すために、このデモを参照してくださいtrue

于 2012-05-29T22:37:27.417 に答える
5

文字列が整数と比較されると、文字列は自動的に整数に変換されます。この場合、文字列には数字がないため、ゼロに評価されて同等性を満たすようになります。2 つのオプションがあります。

if ('0' == 'tr')

また

if (0 === 'tr')

=== は値とのチェックを意味します。PHPマニュアルから

もこれが役立つことがわかりました:

値は文字列の最初の部分によって与えられます。文字列が有効な数値データで始まる場合、これが使用される値になります。それ以外の場合、値は 0 (ゼロ) になります。

于 2012-05-29T22:39:44.173 に答える
-2

0 と比較された任意の文字列は true

于 2012-05-29T22:39:43.937 に答える