(誰かが尋ねる前に... このプロジェクトに MySQL データベースを使用することはできません。)
PHP を使用して、ネストされた UL をフラットファイル データベースから作成する必要があります。私が抱えている問題は、重複したアイテムを表示したくないということです。もっと詳しく説明することもできますが、以下のコードを見ると、データとゴールがわかります。ありがとう。
フラットファイルデータ:
セクション|カテゴリ|サービス セクション 1|カテゴリー 1| セクション 1|カテゴリー 2|SC1 セクション 1|カテゴリ 2|SC2 セクション 1|カテゴリー 2|SC3 セクション 1|カテゴリ 2|SC4 セクション1|カテゴリー3| セクション 2|カテゴリー 4|SC5 セクション 2|カテゴリー 4|SC6 セクション 3|カテゴリー 5|SC7
HTML 目標出力:
<ul class="section">
<li>Section One
<ul class="category">
<li>Category One</li>
<!-- no service -->
</ul> <!-- /category -->
<ul class="category">
<li>Category Two</li>
<ul class="service">
<li>SC1</li>
<li>SC2</li>
<li>SC3</li>
<li>SC4</li>
</ul> <!-- /service -->
</li>
</ul> <!-- /category -->
<ul class="category">
<li>Category Three</li>
<!-- no service -->
</ul> <!-- /category -->
</li>
</ul> <!-- /section -->
<ul class="section">
<li>Section Two
<ul class="category">
<li>Category Four</li>
<ul class="service">
<li>SC5</li>
<li>SC6</li>
</ul> <!-- /service -->
</li>
</ul> <!-- /category -->
</li>
</ul> <!-- /section -->
<ul class="section">
<li>Section Three
<ul class="category">
<li>Category Five</li>
<ul class="service">
<li>SC7</li>
</ul> <!-- /service -->
</li>
</ul> <!-- /category -->
</li>
</ul> <!-- /section -->
私の最初の試み...最初に「セクション」が存在するかどうかを確認し、次に現在の「セクション」を「section_last」に割り当てて、次の「セクション」を現在の「セクション」値と比較する必要があると考えています...そしてそうでない場合は、「セクション」を印刷してから、カテゴリに追加します。 セクションとカテゴリの値で成功しなかったため、「サービス」値セクションをコーディングしませんでした。この背後にある「ロジック」に問題があるか、ループ内の過去の値と、PHP が提供する次の値を比較する方法があるようです。
@Kyle S のサンプル コードを見た後、これをコーディングするための完全に間違ったパスを使用している可能性があります。
<?php
$section = '';
$category = '';
$service = '';
$section_last = '';
$category_last = '';
$service_last = '';
$x = 0;
$file = fopen("categories_data.txt", "r");
if (!$file) { echo 'ERROR: Unable to open file: <strong>'.$file.'</strong>'; }
fgets($file); // IGNORE FIRST LINE IN FLATFILE - column names
while (!feof($file) ) {
$lines = fgets($file);
$ele = explode('|', $lines);
$section = $ele[0];
$category = $ele[1];
$service = $ele[2];
$service = str_replace(array("\n", "\r", "\r\n", "\n\r"), '',$service);
if(strlen($section)>0) {
if(!($section == $section_last)) {
echo '
<ul>
<li>'.$section;
$section_last = $section;
$x++;
}
}
echo '
<ul><li>'.$category.' > '.$service.'</li></ul>
';
if($x) {
if($section != $section_last) {
echo '
</li>
</ul>
';
}
}
} // end $data_file WHILE
fclose($file);
?>