PHP
配列
array_search

【PHP】配列に値が存在するか調べるarray_search()関数。「!==」がポイント

配列から特定のキーワードを検索した〜〜い!→array_search()を使おう

array_search()関数は、指定した値が存在した場合、最初に見つけた要素の添字を返します。存在しなかった場合は、falseを返します。

ただし、if文でarray_search()関数を使用する場合には、注意しなければいけないことがあります。それは、要素の添字が0の場合(配列の最初の要素の場合)、if文では「0」はfalseを返すので、正しい結果を得られることができません。そこで、以下のように書きます。

$data配列の中から$keywordキーワードを検索したい場合、!==を使用して以下のようなif文を書きます。

$data = array('aaa','bbb','ccc','ddd','eee','fff','ggg');
$keyword = 'ddd';
$index = array_search($keyword,$data);
if ($index !== false) {
    echo $index;
} else {
    echo "false";
}

「とりま、array_search()関数でif文を使うときは、こういう書き方をする」ってテンプレ化すれば良いでしょう。

以下コード全文です。参考文献は「PHP逆引きレシピ」です。

search_array.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>配列に値があるか調べる(array_search)</title>
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
</head>
<body>
<?php 

// まずは任意の配列を定義
$data = array('aaa','bbb','ccc','ddd','eee','fff','ggg');
// 検索したいキーワードを定義しておく
$keyword = 'ddd';

echo "<p>配列:";
// まずは配列の中身を普通に書き出してみる
print_r($data);
echo "</p>";
// 配列を検索してみる
// 出力結果「検索する値:ddd」
echo "<p>検索する値:".$keyword."</p>";
echo "<ul>";
echo "<li>in_array関数の結果";
// 配列の中にまずはキーワードが含まれているかどうか調べる
// ->in_array()関数
// $dataの中に$keywordがあったらtrue
if (in_array($keyword,$data)) {
    echo "true";
} else {
    echo "false";

}
echo "</li>";

echo "<li>array_search()関数の結果:";
// array_search()->指定した値が存在した場合、最初に見つけた要素の添字を返す。存在しなかった場合にはfalseを返す。
// 「最初に見つけた要素の添字」->配列の最初の添字は0.
// if文では、0はfalseと同義とみなされてしまう。
$index = array_search($keyword,$data);
// そこで以下のように書きます。
// !== -> 値が等しくないか、同じ型ではない
if ($index !== false) {
    echo $index;
} else {
    echo "false";
}
echo "</li>";
echo "</ul>";

?>
</body>
</html>

出力結果です↓
 2018-05-16 7.30.17.png

参考文献

PHP逆引きレシピ

現場からは以上です。押忍。