by shigemk2

当面は技術的なことしか書かない

配列中に存在しない文字列をin_arrayしてもtrueが返る

PHP: in_array - Manual

たとえば、こんな以下のような配列を作って、in_arrayを使います。
例のような配列なら、文字列iをin_arrayにかけても、falseになるはずですね。
配列にはiなんて文字列は入っていないのですから。

<?php
$array = array('hoge',
               'homu',
               0,
               '777');
print_r($array);
var_dump(in_array('i', $array));

でも結果は

Array
(
[0] => hoge
[1] => homu
[2] => 0
[3] => 777
)
bool(true)

なぜかtrueが返ってる。
よく分からないね。

でもin_arrayの型比較のオプションtrueをつけると…

<?php
$array = array('hoge',
               'homu',
               0,
               '777');
print_r($array);
// in_arrayには型比較をするかどうかのオプションがあります。
var_dump(in_array('i', $array, true));

期待通りの結果が出ました。

Array
(
[0] => hoge
[1] => homu
[2] => 0
[3] => 777
)
bool(false)

一応マニュアルにも同じような質問があったので、
それを参考にしました。