每4条记录创建列表[重复]
Posted
技术标签:
【中文标题】每4条记录创建列表[重复]【英文标题】:Create list per 4 records [duplicate] 【发布时间】:2014-05-18 03:28:07 【问题描述】:我正在尝试创建多个记录列表,每个列表有 4 条记录,但不知道有多少条记录。但是,我无法弄清楚如何处理数学。我手动输入 $n == 5 || $n == 9 等知道它是 stipud 并且不能完全解决问题。谁能帮我处理一下。此外,只有在记录总数不能被 4 整除时,下面的列表才能正常工作。如果可以,它会在最后创建一个空白列表。
$query = "SELECT * FROM `table` WHERE `field` = $whatever";
if ($result = $con->query($query))
$n = 1
$row_cnt = $result->num_rows;
$total_lists = round($row_cnt / 4, 0);
$current_list = 1;
echo "<ul>List $current_list of $total_lists";
while ($row = $result->fetch_assoc())
echo "<li>$row['something']</li>";
if ($n == 5 || $n == 9 || $n == 13 || $n == 17 || $n == 21 || $n ==25 || $n ==29 || $n == 33 || $n == 37 || $n == 41 || $n == 45 || $n == 49 || $n == 53 || $n == 57 || $n == 61 || $n == 65 || $n == 69 || $n == 73 || $n == 77)
echo "</ul>";
$current_list = $current_list + 1;
echo "<ul>List $current_list of $total_lists";
$n = $n + 1;
echo "</ul>";
提前感谢您的帮助。 :)
已解决:
$query = "SELECT * FROM `table` WHERE `field` = $whatever";
if ($result = $con->query($query))
$n = 0
$row_cnt = $result->num_rows;
$total_lists = ceil($row_cnt / 4);
$current_list = 1;
echo "<ul>List $current_list of $total_lists";
while ($row = $result->fetch_assoc())
$n++;
echo "<li>$row['something']</li>";
if ($row_cnt > 4)
if ($n % 4 === 0)
echo "</ul>";
$current_list = $current_list + 1;
echo "<ul>List $current_list of $total_lists";
echo "</ul>";
【问题讨论】:
听说过模运算符:php.net/manual/en/language.operators.arithmetic.php? 或者,您可以将数组结果按四个分块 (array_chunk()
),然后将它们按四个分组,然后相应地循环它们
【参考方案1】:
您实际上离您可能想要做的事情并不太远,您只需要使用一个额外的工具来完成它:%
或模数运算符。
模运算符将返回除法问题的余数:
$x = 5 % 2; // 1
看看你的逻辑,当你的增量器 ($n
) 减去 1 除以 4 的余数为 0 时,你需要采取行动:
if (($n - 1) % 4 === 0)
//your <ul> insertion could go here.
这里是讨论数学运算符的 PHP 手册页的链接:
http://us1.php.net/manual/en/language.operators.arithmetic.php
【讨论】:
非常感谢!第一次遇到模数运算符,它在我的情况下效果很好! :) 顺便说一句,如果记录总数可以被 4 整除,我的最后一页仍然是空白的。我想我当然可以用另一种愚蠢的低效方式来处理:p跨度> @MichaelEugeneYuen 您有$current_list
变量(跟踪您当前的列表),并且您之前计算了要输出的列表总数($total_lists
)。您可以检查这两个数字是否相等。如果他们这样做,您可以在打开最终的空列表之前 break;
退出循环:us2.php.net/break
嗯....我不这么认为。我认为我在舍入 $total_lists 时遇到问题。
查看 PHP 函数 ceil()
。这将始终将浮点数舍入到下一个最高整数。如果您有 5 个条目将其除以 4 以获得您的列表计数,那么您将只有 1 个(1.25 轮到 1)。 ceil
将四舍五入为两个。 us2.php.net/manual/en/function.ceil.php【参考方案2】:
或者,您可以在数据库结果中使用简单的array_chunk()
。为其提供适当的分组(在本例中为四个),然后它们通过 foreach 循环它们。考虑这个例子:
// dummy data (values from db)
$values_from_db = array(
array('id' => 1, 'something' => 'list1'),
array('id' => 2, 'something' => 'list2'),
array('id' => 3, 'something' => 'list3'),
array('id' => 4, 'something' => 'list4'),
array('id' => 5, 'something' => 'list5'),
array('id' => 6, 'something' => 'list6'),
array('id' => 7, 'something' => 'list7'),
array('id' => 8, 'something' => 'list8'),
array('id' => 9, 'something' => 'list9'),
);
$values_from_db = array_chunk($values_from_db, 4); // group them by four's
?>
<?php foreach($values_from_db as $key => $value): ?>
<ul style="list-style-type: none;">
<?php foreach($value as $index => $element): ?>
<li><?php echo $element['id'].'.'.$element['something']; ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
【讨论】:
谢谢。我也会试试看的:)以上是关于每4条记录创建列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章