- ベストアンサー
PHPループで<li>~</li>の出力方法
- PHPのループを使用して、指定されたファイルからURLを取得し、<ul>タグ内に<li>タグで出力する方法をまとめます。
- また、URLの出力と同時に、ファイル名から対応する画像の表示も行います。
- さらに、出力するURLを5つずつ分割し、複数の<ul>タグを作成する方法についても考えます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
簡単に書いてみました。参考までに。 インデントは全角スペースになっています。 <?php $list = file('list.txt'); $count = 1; while($a = array_splice($list, 0, 5)){ echo "<ul>\n"; foreach($a as $v){ printf("<li><a href=\"%s\"><img src=\"%05d.jpg\"/></a></li>\n", chop($v, "\n"), $count); $count++; } echo "</ul>\n"; } ?>
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
<?php $input_01 = file('list/001.txt'); $i = 0; //5個ずつに区切るためのフラグ foreach($input_01 as $num => $value){ //配列のindexもこの方法で取得できる $num++; //画像のナンバリングは1から始めるならとりあえずインクリメント。 if($i === 0){ //区切りが最初だったら echo '<ul>' . "\n"; //<ul>を出力 } //printfでフォーマットして出力をする。 //%sの所に第二引数以下の値が代入される。 //また、%05sといった書き方をすると必ず0で埋められた5桁で出力される。 printf("\t" . '<li><a href="%s"><img src="%05s.jpg" alt="" /></a></li>' . "\n", rtrim($value), $num); $i++; if($i == 5){ //5個で区切りの最後なので echo '</ul>' . "\n"; //</ul>を出力 $i = 0; //フラグを初期化 } } //001.txtが半端な数だった場合、 //</ul>が閉じられないで終了してしまうので if($i !== 0){ //ちぇっくして echo '</ul>' . "\n"; //</ul>を出力 } ?> こんな感じにするのが一番早そうです。 シングルクオーテーションとダブルクオーテーションの混在は結構やります。 HTMLの属性要素をダブルクオーテーションで括りたい場合に、円マーク使うと見づらくなるので。 <?php echo '<a href="http://example.com">link</a>' . "\n"; //としたほうが echo "<a href=\"http://example.com\">link</a>\n"; //とするより見やすいので。 ?>
お礼
回答ありがとうございます! 1.の質問については、スマートなロジックで勉強になります! 2.の質問については、たしかにいろいろなPHPファイル全行で見ても、混在しますよね。 1行ではどんなものかと深読みでした。