Code:
// 単体
($key || false) = array_search(値, 配列, 型の比較[true OR false]);
// 単体
$bool = in_array(値, 配列, 型の比較[true OR false]);
// 複数
($keys || []) = array_keys(配列, 値);
// 単体
$array = [
'a',
'b',
'c',
];
$array = array_fill_keys($array, 1);
$bool = isset($array['a']);
配列内の要素の検索を行う方法は幾つかあります。
それぞれの使い方、使いどころをサンプルを交えて紹介していきます。
それぞれの使い方、使いどころをサンプルを交えて紹介していきます。
使い方
array_searchで検索
Code:
$array = [
'a',
'b',
'c',
'd',
'b',
];
$key = array_search('b', $array, true);
Result:
int(1)
array_searchで検索すると、検索値のkeyを取得することが出来ます。
指定の要素がなければ、falseを返します。
指定要素が配列内に複数あった場合は、一番最初のkeyだけを返します。
余程の理由がない限りは第三引数にtrueをしましょう。
※ 連想配列でも同様にkeyが返ります。
指定の要素がなければ、falseを返します。
指定要素が配列内に複数あった場合は、一番最初のkeyだけを返します。
余程の理由がない限りは第三引数にtrueをしましょう。
※ 連想配列でも同様にkeyが返ります。
in_arrayで検索
Code:
$array = [
'a',
'b',
'c',
'd',
'b',
];
$bool = in_array('b', $array, true);
Result:
bool(true)
in_arrayで検索すると、検索値があるかどうかを、trueまたは、falseで返します。
array_searchより幾分早い?
純粋に検索値があるかどうかの確認をする際に使えます。
余程の理由がない限りは第三引数にtrueをしましょう。
※ 連想配列でも同様にtrueまたは、falseが返ります。
array_searchより幾分早い?
純粋に検索値があるかどうかの確認をする際に使えます。
余程の理由がない限りは第三引数にtrueをしましょう。
※ 連想配列でも同様にtrueまたは、falseが返ります。
array_keysで検索
Code:
$array = [
'a',
'b',
'c',
'd',
'b',
];
$keys = array_keys($array, 'b');
Result:
array(2) {
[0]=>
int(1)
[1]=>
int(4)
}
array_keysで検索すると、array_searchと同様に、検索値のkeyを取得することが出来ます。
array_searchとの違いは、検索値が配列内に複数あった場合、全てのkeyを返してくれるところです。
指定の要素がなければ、空の配列が返ります。
※ 一見、array_searchの上位互換のような振る舞いをしてくれますが、型検索(===)をしてくれず、検索値に「0」を指定した場合などは、全てのkeyが返ってきてしまうので、注意が必要です。
※ 連想配列でも同様にkeyが返ります。
array_searchとの違いは、検索値が配列内に複数あった場合、全てのkeyを返してくれるところです。
指定の要素がなければ、空の配列が返ります。
※ 一見、array_searchの上位互換のような振る舞いをしてくれますが、型検索(===)をしてくれず、検索値に「0」を指定した場合などは、全てのkeyが返ってきてしまうので、注意が必要です。
※ 連想配列でも同様にkeyが返ります。
Code:
$array = [
'a',
'b',
'c',
'd',
'b',
];
$keys = array_keys($array, 0);
Result:
array(5) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(4)
}
array_keysを使用する際は、注意が必要です。
連想配列にしてissetで検索
Code:
$array = [
'a',
'b',
'c',
];
$array = array_fill_keys($array, 1);
$bool = isset($array['a']);
Result:
bool(true)
配列をarray_fill_keysを用いて連想配列に変換して、issetで検索します。
元からある配列の検索には使いにくいですが(array_fill_keysを実行する分、遅くなる)、配列を生成する段階で連想配列にしておけば、手間なく検索可能です。
検索の速度も早い。型検索どうのとか考えなくもていい。素晴らしい!
元からある配列の検索には使いにくいですが(array_fill_keysを実行する分、遅くなる)、配列を生成する段階で連想配列にしておけば、手間なく検索可能です。
検索の速度も早い。型検索どうのとか考えなくもていい。素晴らしい!
使いどころ
array_searchを使い、配列から値を削除
Code:
$array = [
'a',
'b',
'c',
'd',
'b',
];
$key = array_search('b', $array, true);
// $key = int(1)
unset($array[$key]);
Result:
array(4) {
[0]=>
string(1) "a"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "b"
}
array_searchで対象となる値の検索を行い、返ってきたkeyを元に、unsetで値を削除します。
array_searchで検索にも書いた通り、検索した値が複数ある場合は、初めの値しか返してくれないため、注意が必要です。
削除したい要素が複数ある場合は、複数回実行するか、array_keysを使う必要があります。
array_searchで検索にも書いた通り、検索した値が複数ある場合は、初めの値しか返してくれないため、注意が必要です。
削除したい要素が複数ある場合は、複数回実行するか、array_keysを使う必要があります。
まとめ
今回は配列、連想配列の値の検索方法の解説となりました。
array_searchとin_arrayは第三引数にtrueを指定し、型での検索もしないと予期せぬ動作をするので、必ず指定するようにしましょう。
array_keysで数値(0)の検索をする場合は要注意。
個人的には、連想配列のissetまたは!emptyが好きです。
array_searchとin_arrayは第三引数にtrueを指定し、型での検索もしないと予期せぬ動作をするので、必ず指定するようにしましょう。
array_keysで数値(0)の検索をする場合は要注意。
個人的には、連想配列のissetまたは!emptyが好きです。