0

我有一个查询会产生我需要的结果:

SELECT SHOW_NAME, YEAR, CLASS_NAME FROM vwhandlerresults WHERE HANDLER_ID = $gethandlerid ORDER BY YEAR DESC

SHOW_NAME    YEAR    CLASS_NAME
Show 1       2013    Class 1
Show 1       2013    Class 2
Show 2       2013    Class 1
Show 3       2012    Class 1

等等等等

我想在 php 中创建一个 3 级无序列表,以便我可以拥有类似于以下内容的内容:

2013
     Show 1
          Class 1
          Class 2
     Show 2
          Class 1
2012
     Show 3
          Class 1

我已经搜索和搜索,根本无法理解它。我将它管理到一个级别(年份-> 显示)。通过搜索,我觉得我可能需要一个数组?

谢谢

灰色的

4

1 回答 1

0

从技术上讲,您不需要提前构建数组。您可以使用简单的“状态机”从数据库中获取数据。

echo '<ul>';
$oldyear = null;
$oldshow = null;
while($row = fetch_result($result)) { // grab a row of DB data
   if ($oldyear != $row['year']) {
      echo "<li>{$row['year']}<ul>";
   }
   if ($oldshow != $row['show']) {
     echo "<li>{$row['show']}<ul>";
   }
   echo "<li>{$row['class']}</li>";
}

注意:这不会按原样工作,只是为了让您大致了解如果您选择走这条路线需要什么

但是,如果您选择使用数组路由,则前期工作会多一些,但会大大简化输出逻辑:

$data = array();
while($row = fetch_row($result)) {
   $year = $row['year'];
   $show = $row['show'];
   $data[$year][$show][] = $row['class'];
}

echo '<ul>'
foreach($years as $year => $shows) {
   echo '<li>', $year, '<ul>';
   foreach($shows as $show) {
      echo '<li>$show<ul>';
      foreach ($show as $class) {
          echo '<li>', $class, '</li>';
      }
      echo '</ul>';
   }
   echo '</ul>';
}
echo '</ul>';
于 2013-07-19T15:43:45.593 回答