每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条记录创建列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

对于每条记录,还要为记录选择具有最高值的数据[重复]

根据日期仅选择每条记录的最新版本 | MS Access [重复]

SQL查询,如何去除重复的记录?

php随机生成数据库中不存在、不重复数字

如何在c#中将数据添加到集合列表中[重复]

迭代Python列表中的每两个元素[重复]