アプリ版:「スタンプのみでお礼する」機能のリリースについて

<div><input /><label>ラベル名</label></div>という形式になっているHTMLの順序をpreg_matchやpreg_match_allなどで変更したいと思います。
途中、一部分はできたのですが、完成には至っていません。
下記に掲載する求める結果のように出力するにはどのようにしたら良いのでしょうか。

[元になるテキスト]
$text=‘<div class="form-control"><input type="checkbox" name="data[City][name][]” value="1" id="CityName1" /><label for="CityName1">渋谷</label></div>
<div class="form-control"><input type="checkbox" name="data[City][name][]” value="2" id="CityName2" /><label for="CityName2">秋葉原</label></div>
<div class="form-control"><input type="checkbox" name="data[City][name][]” value="3" id="CityName3" /><label for="CityName3">東京</label></div>’;


1.上記のソースを<div>〜</div>で1行ずつ取得して配列($textArr)に入れる


2.配列から1行ずつデータを取得し、1行毎にタグの位置を入れ替える
例)1行目の場合

<div class="form-control"><input type="checkbox" name="data[City][Name][]" value="1" id="CityName1" /><label for="CityName1">渋谷</label></div>

のdivタグを取り除き、「渋谷」の前にある<label for="CityName1">タグを先頭に持ってきて、先頭のラベルに「class="checkbox-inline”」を追加して下記のように変更したいです。

<label class="checkbox-inline" for="CityName1"><input type="checkbox" name="data[City][name][]” value="1" id="CityName1" /></label>


3.求める結果(最終的な出力として)
<label class="checkbox-inline" for="CityName1"><input type="checkbox" name="data[City][name][]” value="1" id="CityName1" />渋谷</label>

<label class="checkbox-inline" for="CityName2"><input type="checkbox" name="data[City][name][]” value="2" id="CityName2" />秋葉原</label>

<label class="checkbox-inline" for="CityName3"><input type="checkbox" name="data[City][name][]” value="3" id="CityName3" />東京</label>


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

[現状で出来ているところ]
//1行のソースのdivタグを取り除く
$text=‘<div class="form-control"><input type="checkbox" name="data[City][name][]” value="1" id="CityName1" /><label for="CityName1">渋谷</label></div>
if (preg_match_all('/<div class="form-control"(.*?)<\/div>/s', $text, $match) ){
echo $match[1][0];

}
(結果)
<input type="checkbox" name="data[City][name][]” value="1" id="CityName1" /><label for="CityName1">渋谷</label>
//labelタグの前半<label for="CityName1">だけを切り出して、ソースの最前に持ってくる部分がうまくいきません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ご回答よろしくお願い致します。

A 回答 (1件)

タイプミスがいろいろあるので気を付けてください



単純に書かれてあるものを羅列するだけでいけそうですけどね・・・

$pattern='/(<div class="form-control">)(<input .+?>)(<label)( for=".+?">)(.+?)(<\/div>)/';
$replacement='$3 class="checkbox-inline"$4$2$5';
$text=preg_replace($pattern,$replacement,$text);
print $text;
    • good
    • 0
この回答へのお礼

yambejpさま

ご回答ありがとうございます。タイプミス申し訳ありませんでした。
preg_matchやpreg_match_allで1個ずつ取り出して連結することしか思い浮かびませんでした。preg_replaceで一度に入れ替えが出来てしまうんですね。
今後ともよろしくお願い致します。

お礼日時:2015/12/18 22:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!