【问题标题】:Create list per 4 records [duplicate]每4条记录创建列表[重复]
【发布时间】: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 mysql


【解决方案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; ?>

【讨论】:

  • 谢谢。我也会试试看的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多