0

配列resAllocには10列と5行が含まれています。すべてのエントリは0に等しいです。したがって、次のIFステートメントはTRUEであると思いますが、何らかの理由でfalseです...なぜですか?

if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
    $count++;
}
4

3 に答える 3

3

!=として評価さ0falseます。!==より厳密な使用。

于 2012-05-19T22:16:54.187 に答える
0

IIRCで0に等しい!=は、FALSEを返します。

于 2012-05-19T22:16:13.930 に答える
0

問題は、文字列と整数を比較していて、PHPが文字列を整数(整数ゼロ)に「便利に」キャストしていることです。変換後に行われる比較はであるため、と0!='ts'評価されます。配列の内容を文字列として明示的に扱うことで、これを防ぐことができます。false0!=0

strval($resAlloc[$i][$j]) != 'ts'

'0'!='ts'これにより、が正しく評価される比較が行われtrueます。strval()に文字列を渡すと、文字列は変更されずに返されるため、配列の内容に関係なく、これを安全に使用できます。

あるいは、Samy Dindaneが言ったように、型変換を行わない!==を使用することもできます。

于 2012-05-19T22:43:16.070 に答える