(在有人问之前......我不能在这个项目中使用 MySQL 数据库。)
使用 PHP,我需要从平面文件数据库创建嵌套的 UL。我遇到的问题是我不希望显示重复的项目。我可以进一步解释,但如果你看一下下面的代码,你会看到数据和目标。谢谢。
平面文件数据:
部分|类别|服务 第一节|第一类| 第一节|第二类|SC1 第一节|第二类|SC2 第一节|第二类|SC3 第一节|第二类|SC4 第一节|第三类| 第二节|第四类|SC5 第二节|第四类|SC6 第三节|第五类|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);
?>