PHPで配列を再帰的に検索して指定した文字列を含む部分を抽出するサンプルコード | クズリーマンのカス備忘録

PHPで配列を再帰的に検索して指定した文字列を含む部分を抽出するサンプルコード

php-logo php
スポンサーリンク

やりたいこと

PHPを使って、
配列を再帰的に検索し、
任意の文字列を含む部分を取得したい。

具体的にいまやってるのは、Laravelのバッチで外部からHTMLを取得して、
その取得したHTMLソース配列から、任意の部分を抽出したい。

HTMLのclass属性とかで指定して取得できたらいいんだけど、上記のやり方だと、classが取得できていない部分があったので、仕方なく文字列で指定する。

また、classやidが必ずしも振られていなくてHTMLのタグ指定で抽出したい部分を絞りきれない場合にも使える。

やり方

こないだ、PHPで配列を再帰的に検索して”.jpg”を含む文字列を抽出するサンプルコードで書いたコードをちょこっと変えるだけ。

以下の関数を用意する。

    /**
     * 配列を再帰的に検索し、第二引数に指定された文字列を含む文字列を配列に格納して返す
     *
     * @return array
     */
    function searchForStr($array, $str) {
        $results = [];

        foreach ($array as $item) {
            if (is_array($item)) {
                // 配列の場合は再帰的に検索を行う
                $results = array_merge($results, $this->searchForStr($item, $str));
            } elseif (is_string($item) && strpos($item, $str) !== false) {
                // 文字列が$strに指定したテキストを含む場合は結果に追加する
                $results[] = $item;
            }
        }

        return $results;
    }

上記の関数を呼び出す。

.jpg を含む部分を抽出したい場合:

          $jpg_array = $this->searchForStr($検索対象の配列, '.jpg');

全角のカッコ’(’を含む部分を抽出したい場合

          $kakko_array = $this->searchForStr($検索対象の配列, '(');

注意点

返り値は配列だゾ

コメント

タイトルとURLをコピーしました