自社データベースの内容をECサイト用に編集するときにサイトによってhtml不可とかclassが使えないとかがあったのでphpで文字列の検索、切り取り、置換、削除などの文字列操作のまとめ。
今回は対象の中に文字列が含まれるかを調べる方法。
php関連記事
PHPのmb_send_mailでメール送信時に、はしご高「髙」やたつさき「﨑」など旧漢字や丸数字の日本語文字化け対策をする
MySQL/MariaDBのデータをPHP側で暗号化・復号する
phpで10進数と16進数、2進数、8進数の変換と0埋め表記
WordPressの条件分岐タグでページを判別する
PHPでpreg_splitの文字化けを回避しながらテキストを改行ごとに区切ってHTMLメールをつくる
WordPressテーマアップロード時に「辿ったリンクは期限が切れています。 もう一度お試しください。」と表示される
PHPで画像アップロード時に比率を保ったまま縮小する
phpで郵便番号を正規表現で3桁・ハイフン・4桁で出力するfunction
phpで電話番号のハイフンを正規表現で出力するfunction
やりたいこと
データの中に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()で区切り文字が消えてしまうのでついでに付け足します。
これで完成です。
コメント