重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

あいうえお 2000
かきくけこ 2001
さしすせそ 2001
たちつてと 2002
なにぬねの 2003
はひふへほ 2003
まみむめも 2003
↑このように規則正しく並んでいるテキスト(a.txt)があります。それを
<p>2000</p>
<ul>
<li>あいうえお</li>
</ul>

<p>2001</p>
<ul>
<li>かきくけこ</li>
<li>さしすせそ</li>
</ul>

<p>2002</p>
<ul>
<li>たちつてと</li>
</ul>

<p>2003</p>
<ul>
<li>なにぬねの</li>
<li>はひふへほ</li>
<li>まみむめも</li>
</ul>

↑このようにグループごと分けて表示させるにはどうしたらいいでしょうか。
$fp_log = file(a.txt);
for ($i=0; $i<count($fp_log); $i++) {
list($desc,$year) = explode(" ", $fp_log[$i]);

この部分。
}//for

教えてください。よろしくお願いします。

A 回答 (2件)

年度で規則正しく並んでいるのなら


$fp_log = file('a.txt');
$y='';
for ($i=0; $i<count($fp_log); $i++) {
list($desc,$year) = explode(" ", $fp_log[$i]);
if ($year!=$y) {
if($i>0){
echo "</ul>\n";
}
echo "<p>$year</p><ul>\n";
}
echo "<li>$desc</li>\n";
$y=$year;
}
echo "</ul>\n";
    • good
    • 0

この部分、だけじゃ無理じゃないですかね。

一度配列に読み込んで、整理してから出力する必要があります。
例えば、連想配列の$arrを用意しておき、

$fp_log = file(a.txt);
for ($i=0; $i<count($fp_log); $i++) {
list($desc,$year) = explode(" ", $fp_log[$i]);
array_push($arr[$year], $desc); // $arr = array( "2007" => array("あいうえお","かきくけこ",,,,,);になります
}

foreach($arr as $key=>$val){
echo "<p>{$key}</p>\n<ul>\n";
foreach($val as $desc){
echo "<li>{$desc}</li>\n";
}
echo "</ul>\n";
}

こんな感じですかね。
    • good
    • 0

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