質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

398閲覧

PHPの繰り返し+置換処理について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/19 02:49

PHPの繰り返し+置換処理について質問させてください。

画像にALTタグを自動で入れようとしています。
画像にIDが振られているのでIDから枚数を判別して、その枚数分だけ繰り返してカウントした回数をALTタグに含めようとしているのですが、一枚の画像に枚数分だけALTタグが入ってしまいます。

$i = 1; foreach( $image_id as $id ){ $html = preg_replace( '/.jpg"/', '.jpg" alt="'.$i.'枚目の画像'"', $html ); $i++; }

理想はこのようにしたいのですが

<img src="image_abcd.jpg" alt="1枚目の画像"> <img src="image_0123.jpg" alt="2枚目の画像"> <img src="image_wxyz.jpg" alt="3枚目の画像"> <img src="image_9876.jpg" alt="4枚目の画像">

現状はこうなってしまいます。

<img src="image_abcd.jpg" alt="4枚目の画像" alt="3枚目の画像" alt="2枚目の画像" alt="1枚目の画像"> <img src="image_0123.jpg" alt="4枚目の画像" alt="3枚目の画像" alt="2枚目の画像" alt="1枚目の画像"> <img src="image_wxyz.jpg" alt="4枚目の画像" alt="3枚目の画像" alt="2枚目の画像" alt="1枚目の画像"> <img src="image_9876.jpg" alt="4枚目の画像" alt="3枚目の画像" alt="2枚目の画像" alt="1枚目の画像">

枚数の順番は降順でも構わないのですが、どのようにすれば理想通りにできますでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s8_chu

2017/08/19 02:53

「画像にIDが振られている」とはどういうことなのかもうすこし詳しく追記していただけませんか?
退会済みユーザー

退会済みユーザー

2017/08/19 03:04

簡単すぎてすみません。 根本はwordpressで動いていまして、画像の情報にはIDなどが入っています。 その情報の中に画像の表示順などは存在しないのでIDを利用して枚数を判断しようと考えました。 本来なら自動でalt=""が入りますが、それらの機能は全て無効化していますので手入力したようなHTMLが出力されるようにしています。
guest

回答2

0

ベストアンサー

foreach の中で、$html を echo してやると何が起きているか分かります。
修正するには以下のように変更してください。

php

1$html = preg_replace('/.jpg"(?! alt)/','.jpg" alt="'.$i.'枚目の画像"', $html, 1);

全体が見えないので、微妙なコードですが、とりあえず意図した動きになります。

投稿2017/08/19 03:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/19 03:15

ご回答ありがとうございます。 凄いです。理想通りになっています。 ちなみに(?! alt)や最後の1にはどのような意味があるのかお教えいただけませんでしょうか? お手数ですがよろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/08/19 03:56

ご回答ありがとうございます。 不明点があればマニュアルサイトなどで調べたりするようにしていますが、正規表現だけはどこの何を見てもチンプンカンプンで・・・ 教えていただいた内容がどのような意味なのか調べてみます。 ありがとうございました。
guest

0

replace()ではなくsprintf()を使う手もあります。

PHP

1<?php 2 3$image_id = ['abcd','0123','wxyz','9876']; 4 5$i = 1; 6$base_html = '<img src="image_%s.jpg" alt="%d枚目の画像">' . "\n"; 7foreach( $image_id as $id ){ 8 $html .= sprintf($base_html, $id, $i); 9 $i++; 10} 11echo($html);
<img src="image_abcd.jpg" alt="1枚目の画像"> <img src="image_0123.jpg" alt="2枚目の画像"> <img src="image_wxyz.jpg" alt="3枚目の画像"> <img src="image_9876.jpg" alt="4枚目の画像">

投稿2017/08/19 03:16

tsuemura

総合スコア663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/19 03:56

ご回答ありがとうございます。 例えの書き方に問題があったようですみません。 でも、試してみましたら同様の結果にできそうでしたので勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問