in_array()関数に渡す第二引数の配列の値が文字列と数値の混在なら意図した動作にならない
<?php in_array( 0, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f') ); in_array( 'a', array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f') ); in_array( 'g', array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f') );
この場合、戻り値は順にTRUE、TRUE、FALSEになりそうだが、全てTRUEが返ってくる。
しかし配列の値を全て文字列型にすると正常動作した。
<?php in_array( 0, array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f') ); in_array( 'a', array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f') ); in_array( 'g', array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f') );
ちゃんとドキュメント探してないけど、in_array()の実装ってこれで正しいの?
16進数チェックなら正規表現でやれ禁止