読者です 読者をやめる 読者になる 読者になる

by shigemk2

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

array_search と in_array と array_keys

php

PHPで配列の中に値があるか調べる関数 array_search() in_array() array_keys() 比較 - Webプログラマー+WebデザイナーなZARU日記
上記から。ありがとうございます。

array_search()

array_search() は、配列の中に指定した値があった場合、
その配列キーを返す。
複数の値がある場合は、先頭の配列キーのみが返す。
また、見つからなかった場合は bool型のFALSEを返すが、
場合によっては 0 や "" といった値を返す事もあるらしい。

<?php
if(!array_search($searchStr,$array)){
	print 'None';
}else{
	print 'Hit';
}
?>

とすると、もし一番最初の配列に目的の値があった場合 0 を返してしまい、
Noneが表示されててしまう。
そのため、PHPではなるべく型のチェックをする
'===''!=='を使用するようにすると良い。

<?php
if(array_search($searchStr,$array) === FALSE)){
	print 'None';
}else{
	print 'Hit';
}
?>

in_array()

in_array() は、配列の中に指定した値があった場合、TRUEを、
なかった場合には、FALSEを返す。
なので、中に入っているかどうかのチェックだけでよければ、
array_search() よりも in_array() を使った方が混乱が少ない。

array_keys()

array_keys() は、array_search() と in_array() とは引数の順番が違い、
「配列」「検索値」の順になる。2番目の引数はオプションで、
指定しなかった場合は配列全てのキーを返す。

また、array_search() との違いは、
重複した値があった場合でも全てのキーを配列にして返す。
配列のキーを使いたい場合は、array_keys() を使用した方がメリットは高い。

まとめると

メソッド 引数 返り値
array_search 1.検索値 2.配列 ヒットした最初の値
in_array 1.検索値 2.配列 TRUE or FALSE
array_keys 1.配列 2.検索値 ヒットした全てのキーの配列

となる。使い分けると便利かもしれない。