PHP初心者が必ず知るべき!array_search関数の使い方と10の活用例

PHPのarray_search関数の基本的な使い方と活用例を紹介する記事のサムネイルPHP
この記事は約13分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPを学び始めているあなたにとって、様々な関数の使い方を理解することは、より効率的にプログラミングを行うための重要なステップです。

今回の記事では、PHPの重要な関数の一つであるarray_search関数の使い方とその活用例について、初心者の方が理解しやすいように詳しく解説していきます。

この記事を通じて、array_search関数の使い方を理解し、あなた自身のコードに取り入れることができるようになります。

●PHPとarray_search関数の基本

まずは、PHPとarray_search関数について基本的な情報から確認していきましょう。

○PHPとは

PHPは、Webサイト制作に広く用いられるスクリプト言語の一つです。

特にサーバーサイドでの処理を担当し、データベースの操作やユーザーからの入力情報の処理などを行います。

そのため、PHPを使えば動的なWebサイトを制作することが可能となります。

○array_search関数とは

array_search関数は、指定した値が配列の中に存在する場合、その値のインデックス(キー)を返すPHPの関数です。

値が配列内に存在しない場合は、FALSEを返します。

この関数を使うと、特定の値が配列に含まれているかどうか、またはその位置がどこであるかを簡単に調べることができます。

●array_search関数の使い方

array_search関数の使い方について詳しく見ていきましょう。

○基本的な使い方

array_search関数の基本的な使い方は次のようになります。

php
$index = array_search(検索したい値, 検索対象の配列);

ここで、検索したい値は配列内で見つけたい値を指定します。

検索対象の配列は、検索を行う配列を指定します。

○引数の詳細

array_search関数には3つの引数があります。

  1. needle(必須):これは検索したい値を指定します。
  2. haystack(必須):これは検索を行う配列を指定します。
  3. strict(任意):このオプションをTRUEに設定すると、型も考慮して値を検索します。
    デフォルトはFALSEで、これは型を考慮せずに値を検索します。

array_search関数を使用する際には、これらの引数を適切に指定することが重要です。

今回の記事ではここまでです。

次回は、”array_search関数の活用例とサンプルコード”について詳しく解説していきます。

●array_search関数の活用例とサンプルコード

array_search関数の機能を理解するためには、具体的なコードを見てみることが一番の近道です。

では、array_search関数の活用例を10個、実際のサンプルコードとともに紹介します。

○サンプルコード1:配列から値を検索する

このコードではarray_search関数を使って配列から値を検索する例を示します。

ここでは数字の配列から特定の数字を検索しています。

$numbers = array(1, 2, 3, 4, 5);
$target = 3;
$index = array_search($target, $numbers);
echo $index;

このコードを実行すると、ターゲットの3が配列内で何番目に位置しているかが出力されます。

PHPの配列は0からカウントするため、出力結果は2となります。

○サンプルコード2:マルチ次元配列から値を検索する

次に、マルチ次元配列から値を検索する例を示します。

ただし、注意点としてarray_search関数は一次元配列のみを対象とし、マルチ次元配列には対応していません。

そのため、マルチ次元配列の中から値を検索する場合は、自身で関数を定義するなど別の手段を取る必要があります。

○サンプルコード3:厳密な検索を行う

array_search関数の第3引数を使うと、型まで含めて厳密な検索を行うことができます。

次のコードでは、数値の1と文字列の’1’を区別して検索しています。

$array = array('1', 2, 3);
$index = array_search(1, $array, true);
echo $index;

このコードを実行すると、出力結果は何も表示されません。

なぜなら、厳密モードでは型も含めて検索するため、数値の1と文字列の’1’は異なるものと判断されるからです。

○サンプルコード4:配列のキーを取得する

このコードでは、array_search関数を用いて、配列から特定の値が存在するキーを取得します。

例えば、商品名をキーとした価格の配列から、特定の価格に対応する商品名を見つけることができます。

$prices = array('apple' => 100, 'banana' => 200, 'cherry' => 300);
$price = 200;
$product = array_search($price, $prices);
echo $product;

このコードを実行すると、「banana」という文字列が出力されます。

これは200という価格がバナナに対応しているからです。

○サンプルコード5:存在しない値の検索

次に、存在しない値を検索した場合にどうなるかを見てみましょう。

array_search関数は値が見つからない場合、falseを返す特性があります。

$numbers = array(1, 2, 3);
$index = array_search(4, $numbers);
var_dump($index);

このコードを実行すると、出力結果はbool(false)となります。

これは検索した値4が配列に存在しないためです。

○サンプルコード6:大文字小文字を区別せず検索する

PHPのarray_search関数はデフォルトでは大文字と小文字を区別します。

しかし、大文字小文字を区別せずに検索したい場合は、事前に値や配列を小文字または大文字に変換する必要があります。

$fruits = array('Apple', 'Banana', 'Cherry');
$target = 'apple';
$index = array_search(strtolower($target), array_map('strtolower', $fruits));
echo $index;

このコードを実行すると、出力結果は0となります。

これは’apple’が配列内で最初の位置に存在するためです。

大文字小文字を無視した検索を実現するために、strtolower関数を用いて、検索対象となる配列および検索したい値を全て小文字に変換しています。

○サンプルコード7:型も考慮した検索を行う

このサンプルコードでは、PHPのarray_search関数を用いて、型も考慮した値の検索を行います。

array_search関数は、デフォルトでは型を考慮せず、値だけで検索を行います。

しかし、場合によっては数値の1と文字列の”1″を区別して検索したいこともあります。

そうした場合には、array_search関数の第三引数にtrueを設定することで、型も考慮した検索が可能となります。

$data = array(1, '1', 2, '2');
$search = 1;
$index = array_search($search, $data, true);
echo $index;

このコードを実行すると、出力結果は0となります。

検索対象は数値の1で、array_search関数の第三引数にtrueを設定したため、型も考慮して検索が行われ、最初の数値1が見つかります。

○サンプルコード8:オブジェクトのプロパティを検索する

次に、オブジェクトのプロパティを検索する方法を見ていきましょう。

PHPのarray_search関数はオブジェクトでも使用することが可能です。

class Fruit {
    public $name;
    public $color;
    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }
}
$apple = new Fruit('Apple', 'Red');
$banana = new Fruit('Banana', 'Yellow');
$cherry = new Fruit('Cherry', 'Red');

$fruits = array($apple, $banana, $cherry);
$search = new Fruit('Apple', 'Red');
$index = array_search($search, $fruits);
echo $index;

このコードを実行すると、出力結果はbool(false)となります。

これは、検索対象の$searchと配列$fruits内のオブジェクトが異なるインスタンスであるため、完全一致するものが見つからないからです。

しかし、名前や色といったプロパティが同じであれば同一のフルーツとみなしたい場合もあります。

そうした場合には、array_search関数だけではなく、array_filter関数等を使って自分で比較処理を書く必要があります。

○サンプルコード9:値が配列に存在するかどうかを確認する

このサンプルコードでは、array_search関数を使って値が配列に存在するかどうかを確認する方法を紹介します。

この例では、検索したい値と配列を指定して、その値が配列に存在するかどうかを確認します。

ここでは数値の3が配列に存在するかどうかを確認してみましょう。

$data = array(1, 2, 3, 4, 5);
$search = 3;
$index = array_search($search, $data);
if ($index !== false) {
    echo "Found at index: $index";
} else {
    echo "Not Found";
}

このコードを実行すると、出力結果は「Found at index: 2」となります。

これは、配列$dataの3番目の要素(インデックスは0から始まるためインデックス番号は2)に数値の3が存在するためです。

array_search関数は、値が見つかった場合にはそのキー(インデックス)を返し、見つからない場合にはfalseを返します。

そのため、検索結果をif文で評価し、結果に応じて処理を分岐することができます。

○サンプルコード10:値が配列に存在する場合のみ特定の処理を行う

次に、値が配列に存在する場合のみ特定の処理を行う例を見ていきましょう。

この例では、数値の3が配列に存在する場合のみ、メッセージを表示します。

$data = array(1, 2, 3, 4, 5);
$search = 3;
$index = array_search($search, $data);
if ($index !== false) {
    echo "Value $search found at index: $index";
} else {
    echo "Value $search not found";
}

このコードを実行すると、出力結果は「Value 3 found at index: 2」となります。

これは、値が配列に存在する場合には、その値とインデックスを表示し、存在しない場合には見つからない旨のメッセージを表示しています。

これらの例から、PHPのarray_search関数を使えば、配列内に特定の値が存在するかどうかを簡単に確認できることがわかります。

また、検索結果に応じて処理を分岐することも可能です。

●array_search関数の注意点と対処法

PHPのarray_search関数は、指定した値が配列に存在する場合、そのキー(またはインデックス)を返します。

しかし、この関数を使用する際にはいくつか注意点があります。

まず一つ目の注意点は、array_search関数はデフォルトでは型を考慮しないことです。

つまり、数値の1と文字列の’1’は同じとみなされます。

これは意図しない結果を生む可能性があるため、型も考慮したい場合は、array_search関数の第3引数にtrueを指定する必要があります。

次のコードは、型も考慮して検索を行う例です。

$data = array(1, '1', 2, '2');
$search = 1;
$index = array_search($search, $data, true);
if ($index !== false) {
    echo "Found at index: $index";
} else {
    echo "Not Found";
}

このコードを実行すると、「Found at index: 0」と表示されます。

3つ目の引数にtrueを指定しているため、型も考慮した検索が行われ、数値の1と文字列の’1’は区別されます。

二つ目の注意点は、array_search関数は配列の先頭から検索を開始し、最初に見つかった値のキーを返すため、同じ値が複数存在する場合、そのすべての位置を知りたい場合には、array_search関数だけでは対応できません。

そのような場合は、foreachやforなどのループを使って、配列全体を走査する必要があります。

以上のような注意点を把握し、適切に対処することで、array_search関数をより有効に使用することができます。

次に、array_search関数をカスタマイズする方法について見ていきましょう。

これはarray_search関数の基本的な機能をさらに拡張する方法であり、より具体的な要件に対応するための手段です。

●array_search関数のカスタマイズ方法

array_search関数の基本的な機能を拡張し、特定の要件を満たすためには、PHPの関数を自身で定義することが有効です。

ここでは、配列内のすべての一致する値のインデックスを返すカスタム関数の例を紹介します。

このカスタム関数では、配列を引数として受け取り、指定した値が存在するすべてのインデックスを新しい配列として返します。

その際、foreachループを使用して配列の全要素を走査します。

function array_all_search($needle, $haystack)
{
    $result = [];
    foreach ($haystack as $key => $value) {
        if ($value === $needle) {
            $result[] = $key;
        }
    }
    return $result;
}

$data = array(1, '1', 2, '2', 1, '1', 2, '2');
$search = 1;
$indexes = array_all_search($search, $data);
print_r($indexes);

このコードではarray_all_searchという関数を自身で定義しています。

この例では、指定した値と配列内の値が一致する場合(ここでは両者が厳密に等しい場合)、そのキーを新しい配列$resultに追加します。

これにより、配列内のすべての一致する値のインデックスを取得することができます。

上記のコードを実行すると、次のような結果が得られます。

Array
(
    [0] => 0
    [1] => 4
)

この結果は、指定した値(この場合は1)が配列内に存在するインデックス(この場合は0と4)を表示しています。

つまり、このカスタム関数を使えば、PHPのarray_search関数では取得できない複数のインデックスを簡単に取得することが可能になります。

まとめ

この記事では、PHPのarray_search関数の使い方と注意点、さらにそのカスタマイズ方法について詳しく解説しました。

array_search関数は配列から特定の値を探すための関数であり、その使用方法は非常にシンプルです。

しかし、注意点として値の比較には「==」ではなく「===」を使用するということ、そして戻り値が0の場合はfalseと混同しないように注意することが挙げられます。

また、基本的なarray_search関数だけでなく、それを自分自身でカスタマイズする方法についても紹介しました。

カスタム関数を使えば、配列内のすべての一致する値のインデックスを返すことが可能になります。

この記事を通じて、PHP初心者でもarray_search関数の使い方や注意点、応用例を理解できたことでしょう。

そして、これらの知識が今後のPHPプログラミングの学習や実務に役立つことを願っています。

PHPにはarray_search関数以外にも、配列を扱うための様々な関数が存在します。

それぞれの関数がどのような挙動を持ち、どのように使用するのかを学び、自身のコーディングスキルを高めていきましょう。