0

我正在尝试使用 PHP 将查询结果分成块,但似乎无法弄清楚如何制定查询或循环以将结果分成四个批次并用特定的 HTML 元素包围这四行。

内容特别是摄影作品集,我只是尝试逐行显示照片,但我需要设置样式的方式要求每一行基本上都是一组单独的信息。

这是我目前正在使用的代码:

<ul class="no-bullet">
<?php

require("connect.php");
$query = "SELECT * FROM dv_photo_work LIMIT 4";

$result = mysql_query($query, $link);
while ($row = mysql_fetch_array($result)) {
  print('
     <li><img alt="'.$row["img_title"].'" src="'.$row["img_slug"].'></li>');
}


?>
</ul>

不过,我只希望该列表中有四个图像。然后是另一个列表中的另外四个。 您能帮我重新设计循环以使其返回四条记录,然后开始对另一个列表中的以下四条记录进行新的查询吗? 我将从数据库中检索大约 100 条记录,因此它必须能够继续,直到列出整个表。

我想这类似于分页过程,但这是我不熟悉的另一种技术。我假设这是对查询和标记的简单调整,但是我可以理解它需要更多的代码创造力而不是简单的修复。

非常感谢,

乔希

4

4 回答 4

1

尝试这个

<ul class="no-bullet">
<?php
require("connect.php");
$query = "SELECT * FROM dv_photo_work";
$result = mysql_query($query, $link);
$i =1;
while($row = mysql_fetch_array($result)) {
   print('<li><img alt="'.$row["img_title"].'" src="'.$row["img_slug"].'></li>');
   if ($i%4 == 0) echo "</ul><ul class='no-bullet'>";
   $i++;
}
?>
</ul>
于 2013-06-27T02:08:00.803 回答
0

第一的!将该逻辑从 html 移开,这将使您更清楚地看到问题。第二!那么两个类,一个代表 n 长度的查询结果列表的 A 类呢?A 类应该是一个迭代器,以便 B 类可以提取任意长度的结果块并返回适当大小的结果对象。也许有第三个类,其实例代表大小受约束的结果。因此,在所有三个类中,A 代表一个完整的结果列表,B 作用于 a 并返回 C 的实例,这将代表您的大小受约束的结果块。

这原本是一个评论,但太长了,所以我不得不把它作为一个答案(对不起,如果它太'教人钓鱼'我只是不想写php......)

于 2013-06-27T02:01:54.097 回答
0

获取所有结果,将它们读入多维数组,然后使用 array_chunk() 将它们分成组。

$query = mysql_query("SELECT * FROM dv_photo_work",$link);
$results = array();
while($line = mysql_fetch_array($query, MYSQL_ASSOC)){
    $results[] = $line;
}
$lists = array_chunk($results,4);
foreach ($lists as $list) {
    echo '<ul>';
    foreach ($list as $result) {
        echo '<li><img alt="'.$result["img_title"].'" src="'.$result["img_slug"].'></li>'
    }
    echo '</ul>';
}
于 2013-06-27T02:10:28.457 回答
0

以下是所涉及逻辑的概述,使用模运算符 (%) 在每第四条记录处更改 HTML:

$i = 0;

// within your current while-loop:
    if ($i % 4 == 0) {
        // $i is a multiple of 4 (including 0, the first record)
        if ($i > 0) {
            // finish the previous ul-tag
        }
        // start a new block of HTML (the ul)
    }
    // output the li
    $i += 1;

// after the loop, close the last ul
于 2013-06-27T02:14:42.520 回答