$myfile = mysql_query($query_myfile, $db) or die(mysql_error());
$totalRows_myfile = mysql_num_rows($myfile);
$typ_d = '';
$test='';
while ( $row_myfile = mysql_fetch_assoc($myfile) )
{
if ( $typ_d != $row_myfile[ 'typ_d' ] )
{
$typ_d = $row_myfile[ 'typ_d' ];
echo "<h2>$typ_d</h2>";
}
if ( $test != $row_myfile[ 'test' ] )
{
$test = $row_myfile[ 'test' ];
echo "<h3>$test</h3>";
}
echo "<li><a href=\"myfileDetail.php?myfile_id=".$row_myfile['myfile_id']. "\">";
echo $row_myfile['shortname'].' ';
echo $row_myfile['name']; ?></a></li>
<?php } ?>
此代码列出了像这样的组和子组中的元素
由
生成的Typ_d(组)echo "<h2>$typ_d</h2>";
由
生成的测试(子组)echo "<h3>$test</h3>";
然后由
生成的列表echo "<li><a href=\"myfileDetail.php?myfile_id=".$row_myfile['myfile_id']. "\">";
echo $row_myfile['shortname'].' ';
echo $row_myfile['name']; ?></a></li>
我在生成html标签时遇到问题,如下所示
<h2>Typ_d1</h2>
<h3> Test1</h3>
<ul>
<li> List1</li>
<li> List2 </li>
<li>List3 </li>
</ul>
<h2>Typ_d2 </h2>
<h3>Test2</h3>
<ul>
<li> List1</li>
<li> List2</li>
<li> List3</li>
</ul>
<h2> Typ_d3</h2>
<h3> Test3</h3>
<ul>
<li> List1</li>
<li> List2 </li>
<li>List3 </li>
</ul>
我已经尝试过这么多,但我无法通过正确的订单获得它..请帮助
当前输出不是&lt; ul
&gt;标签,我想把它放在代码
这是当前的输出
<li> List1</li>
<li> List2 </li>
<li>List3 </li>
<h2>Typ_d2 </h2>
<h3>Test2</h3>
<li> List1</li>
<li> List2</li>
<li> List3</li>
<h2> Typ_d3</h2>
<h3> Test3</h3>
<li> List1</li>
<li> List2 </li>
<li>List3 </li>
答案 0 :(得分:2)
好的,如果没有对代码进行重大重组(例如进入MVC模式),最好先将数据编译成数组,然后循环生成数据以生成输出,就像@Blowski说的那样。像这样:
$myfile = mysql_query($query_myfile, $db) or die(mysql_error());
$groups = array();
while ( $row_myfile = mysql_fetch_assoc( $myfile ) ) {
$typ_d = $row_myfile[ 'typ_d' ];
$groups[ $typ_d ][ 'h2' ] = $row_myfile[ 'typ_d' ];
$groups[ $typ_d ][ 'h3' ] = $row_myfile[ 'test' ];
$groups[ $typ_d ][ 'files' ][] = <<<DOCHERE
<li>
<a href="myfileDetail.php?myfile_id="{$row_myfile[ 'myfile_id' ]}">{$row_myfile[ 'shortname' ]} {$row_myfile[ 'name' ]}</a>
</li>
DOCHERE;
}
// while
foreach ( $groups as &$group ) {
$group[ 'files' ] = join( "\n\n", $group[ 'files' ] );
$group = <<<DOCHERE
<h2>
{$group[ 'h2' ]}
</h2>
<h3>
{$group[ 'h3' ]}
</h3>
<ul>
{$group[ 'files' ]}
</ul>
DOCHERE;
}
// foreach
echo join( "\n\n\n", $groups );
注意:
在以HTML格式输出变量值之前,几乎可以肯定是html转义变量值。
我已经消除了HTML输出生成的丑陋连接,并将其替换为变量插值。
我已经消除了HTML输出字符串的不明智的双引号,而是使用HEREDOC
代替。
有关如何执行此操作的详细信息有很多变化,例如:在while循环中调用array_key_exists()
,而不是每次只重新分配h2
和h3
个键,通过引用分配$groups[ $typ_d ]
以缩短其他赋值语句等。< / p>
答案 1 :(得分:1)
正如@jit指出的那样,你没有在任何地方回显<ul>
标签。代码的结构使这有点困难。
沿着MVC设计模式重构代码:
视图会做类似的事情(显然,你需要根据自己的需要进行格式化):
<?php if($type1 == $row->getType() ?><h2><?php echo $type1 ?></h2><?php endif ?>
<h3><?php echo $type2 ?></h2>
<ul>
<?php foreach($results as $row) : ?>
<li><a href="<?php echo $row->getLink() ?>"><?php echo $row->getText() ?></a></li>
<?php endforeach ?>
</ul>
此方法的一些好处是您的数据库查询更具可重用性,输出HTML更易于阅读和编辑。
答案 2 :(得分:0)
在每个echo语句的末尾使用<br/>
。