phpで対象の中に文字列が含まれるかを調べるstrpos()

プロモーションが含まれています

phpで対象の中に文字列が含まれるかを調べるstrpos()

自社データベースの内容をECサイト用に編集するときにサイトによってhtml不可とかclassが使えないとかがあったのでphpで文字列の検索、切り取り、置換、削除などの文字列操作のまとめ。
今回は対象の中に文字列が含まれるかを調べる方法。

php関連記事

関連記事をもっとみる

やりたいこと

データの中にpタグ内に書かれたモデルデータがあるかを検索してあれば変数に格納する。
なければ変数を空にする。

対象の中に文字列が含まれるかを調べるstrpos()の使い方

$data = '<p class="model_data">モデル着用サイズ XS</p><p class="item_attention">付属品に欠品がございます。</p>';
$offset = 5;
strpos($data, "model_data", $offset);

$dataの中にmodel_dataという文字が含まれているかを検索します。
また、$offsetを設定することで検索の開始位置を変更できます。負の数を指定すると後ろから戻った数から検索します。

if文にstrpos()を組み込むときの注意

$data = '<p class="model_data">モデル着用サイズ XS</p><p class="item_attention">付属品に欠品がございます。</p>';
if (strpos($data, "model_data")) {//結果:true
    //含まれる場合の処理
}

if (strpos($data, '<p class="model_data">')) {//false
    //含まれる場合の処理
}

if (strpos($data, '<p class="model_data">') !== FALSE) {//結果:true
    //含まれる場合の処理
}

1つ目のif文は結果が10になるのでtrueを返します。
2つ目のif文は結果が0になるのでfalseを返します。
3つ目のif文は結果が0になるが、型で判別しているのでtrueを返します。

if文は0でもfalseを返すので、検索して見つかった場合でもfalseになってしまうので注意が必要です。

やりたいことを実現してみる

php

$model = "";
$data = '<p class="model_data">モデル着用サイズ XS</p><p class="item_attention">付属品に欠品がございます。</p>';
$pdata = explode("</p>", $data);
    
for ($i=0; $i < count($pdata); $i++) { 
    if (strpos($pdata[$i], "model_data") !== FALSE) {
        $model = $pdata[$i] . "</p>";
    }
}

まずは$dataからphpで文字列を区切り文字で配列に分割するexplodeを使って</p>で区切って配列にします。
前提がpの開始タグの前に文字列がない場合にしか正しく動作しません。その場合はまず先にpタグより前を削除してください。

できた配列をfor文で回してstrpos()で配列の中身を検索します。
見つかれば$modelに抽出した値を入れます。この時、explode()で区切り文字が消えてしまうのでついでに付け足します。

これで完成です。

コメント

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