最近、比較操作を行っているときに、普段は無視しているいくつかの問題に遭遇しましたが、今回は問題が発生するとは予想していませんでした。
PHP の == 比較演算子は、2 つのデータの値が等しい場合は true を返し、そうでない場合は false を返します。ここで言われているのは、値が等しい場合、つまり、値の種類はここでは比較されないということです。例: 12 == '12' 結果は true になります。
PHP変数の型が弱いため、変数の型が意図的に制御されていないことが多く、今回の問題は変数の型が原因です。
array_search 関数を使用するときに問題が発生します。
array_search の機能は、指定された値を持つデータを検索し、値が存在する場合、その値に対応するインデックスを返します。この値が複数回発生した場合は、最初に取得されたインデックスが返されます。値が存在しない場合は false を返します。
私の問題は次のような環境で発生します:
<?php$testA = array( 'a' => '123', 'b' => 'iphp8.com', 'c' => '014778', 'd' => '14778', ); echo array_search('14778', $testA);
この時点で得られる結果は c になります。
デフォルトでは、array_search は値の型を比較しません。つまり、== 比較を行います。純粋な数値に関しては、文字列であっても比較のために数値に変換されるようです。そのため、先頭の 0 がいくつあるかは関係なく、「14778」と「014778」は等しいため、上記の例では、返される結果は、思ったように d ではなく、c になりました。
この時点で、必要な結果を得るには、値と型の両方を比較する必要がある === 比較を実行する必要があります。
array_search の場合、3 番目のパラメーターに true 値を与えることで合同比較を実行できます。
上記は、PHP の note 010 == 比較演算子の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。