やりたいこと
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($検索対象の配列, '(');
注意点
返り値は配列だゾ
コメント