くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

[PHP]array_search()

2013-11-12 11:00:47 | SEまわり
array_search() 関数で不思議な現象。

$ary = array(2, 5, 8, 10);
var_dump(array_search(10, $ary));


とすると、

int(1)


が返る。期待どおり。

が、2行目を

var_dump(array_search(2, $ary));


にすると、

int(0)



が返ってきてしまう。

array の先頭要素を 3 に変えて、array_search の needle(第1引数)を 3 にしても同じく 0 (false) が返る。

haystack ( 第2引数、$ary)の先頭要素は常に false になる仕様?(-"-;)

おかしいなあと思ったのでマニュアルを調べる。

PHP マニュアルによれば、

needle が見つかった場合に配列のキー、 それ以外の場合に FALSE を返します。
もし haystack に 1 つ以上の needle に見つかった場合、 最初にマッチしたキーが返されます。全てのマッチした値に対するキーを返すためには、代わりに array_keys() にパラメータ search_value を付けて使用してください。


ってことなので、先頭要素の【キー】である 0 が返ってきてるわけか。

見つかってないってことじゃなくて、見つけたけどそのキーが 0 なもんで、「 0 == true」は成り立たない、と。

なので、「===」を使って、ちゃんと比較してあげれば良かった。


$ary = array(2, 5, 8, 10);
if ( array_search(1, $ary) === False ) { echo "NOT Found.\n"; }
else { echo "Found.\n";}


PHP のよくひっかかるところをちょうど踏んだな。