dポイントプレゼントキャンペーン実施中!

<?php


$input_01 = file('list/001.txt');

echo '<ul>'."\n";

foreach( $input_01 as $value ){
$num++;
echo "\t".'<li><a href="' .$value. '"><img src="' .$num. '.jpg" alt="" /></a></li>'."\n";
}

echo '</ul>'."\n";

/*
1. list/001.txtにはURLが多数入っていると仮定します。上記の構文ですと、<ul>~</ul>の中に全てのURLが出力されます。
  例えばこれを以下のように5つずつ順にURLを出力、同時に00001~00005.jpgとなるよう出力するには、どうのような方法が、 軽く、スマートな方法のでしょうか?

<ul>
<li>~</li>
<li>~</li>
<li>~</li>
<li>~</li>
<li>~</li>
</ul>

2. echo '<ul>'."\n"; のように、シングル、ダブルクォートを同時に使用する事は、変でしょうか?

色々検索して試行錯誤しましたが、フリーズしてしまいました。ご回答よろしくお願いいたします。
*/

A 回答 (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";
 }
?>

参考URL:http://www.php.net/manual/ja/function.array-spli …
    • good
    • 0

<?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";
//とするより見やすいので。

?>
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
1.の質問については、スマートなロジックで勉強になります!
2.の質問については、たしかにいろいろなPHPファイル全行で見ても、混在しますよね。
1行ではどんなものかと深読みでした。

お礼日時:2011/05/15 18:30

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