【发布时间】:2013-03-10 13:46:01
【问题描述】:
我需要创建一个从数据库获取数据的循环...并在<li> 中打印数据,但每 5 个li 需要在ul 中...
我该如何做这个循环?
【问题讨论】:
-
您可以使用
array_chunk()将您的数组拆分为包含 5 个元素的数组,然后循环遍历每个元素。
我需要创建一个从数据库获取数据的循环...并在<li> 中打印数据,但每 5 个li 需要在ul 中...
我该如何做这个循环?
【问题讨论】:
array_chunk() 将您的数组拆分为包含 5 个元素的数组,然后循环遍历每个元素。
您可以使用NoRewindIterator 和LimitIterator 来做到这一点。只需将从表示结果集的数据库客户端库返回的迭代器包装到 NoRewindIterator 中,然后您可以使用 LimitIterator 进行 5 次迭代,直到整个迭代器无效:
$it = new NoRewindIterator($result);
$it->getInnerIterator()->rewind(); # Rewind once
while ($it->valid())
{
echo '<ul>';
foreach (new LimitIterator($it, 0, 5) as $row)
{
echo '<li>', .... , '</li>' ;
}
echo '</ul>';
}
编辑: 添加了rewind() 操作,因为默认情况下某些不自动倒带的迭代器需要它,有关所有详细信息,请参阅我创建的参考问题:When does the NoRewindIterator rewind the inner Iterator?
【讨论】:
为什么不使用modulo 运算符?
$counter = 0;
echo '<ul>';
while ($row = fetchRow())
{
$counter++;
if ($counter % 5 == 0) echo '</ul><ul>';
echo '<li>' . $row['field'] . '</li>';
}
echo '</ul>';
【讨论】:
使用另一个计数器:
$counter=0;
echo '<ul>';
while($record_in_database=fetch_it_somehow){
if($counter==5){
$counter=0;
echo '</ul><ul>'; // *
}
echo '<li>'.$record_in_database->retrieve_data_somehow().'</li>';
++$counter;
} // end while
echo '</ul>'; // you must close it as you've opened in * marked line
【讨论】: