配列resAlloc
には10列と5行が含まれています。すべてのエントリは0に等しいです。したがって、次のIFステートメントはTRUEであると思いますが、何らかの理由でfalseです...なぜですか?
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
配列resAlloc
には10列と5行が含まれています。すべてのエントリは0に等しいです。したがって、次のIFステートメントはTRUEであると思いますが、何らかの理由でfalseです...なぜですか?
if ($resAlloc[$i][$j] != 'ts' && $resAlloc[$i][$j] != 't' && $resAlloc[$i][$j] != 'st') {
$count++;
}
!=
として評価さ0
れfalse
ます。!==
より厳密な使用。
IIRCで0に等しい!=は、FALSEを返します。
問題は、文字列と整数を比較していて、PHPが文字列を整数(整数ゼロ)に「便利に」キャストしていることです。変換後に行われる比較はであるため、と0!='ts'
評価されます。配列の内容を文字列として明示的に扱うことで、これを防ぐことができます。false
0!=0
strval($resAlloc[$i][$j]) != 'ts'
'0'!='ts'
これにより、が正しく評価される比較が行われtrue
ます。strval()に文字列を渡すと、文字列は変更されずに返されるため、配列の内容に関係なく、これを安全に使用できます。
あるいは、Samy Dindaneが言ったように、型変換を行わない!==を使用することもできます。