【问题标题】:Adding 4 item per row in PHP在 PHP 中每行添加 4 个项目
【发布时间】:2017-02-10 10:48:48
【问题描述】:

我在一个变量中有一些 HTML,我想每行循环 4 次。我先提出几个问题。在一个中,我得到了行数并将其存储在一个变量中。第二,我希望获取我需要显示的相关数据。

$results = $dbCon->query("SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit");
$total = mysqli_num_rows($results);
$res = $dbCon->query($results);
$data = $res->fetch_assoc();
$link = $data['link'];
$title = $data['title'];
$image = $data['image'];
$imgAlt = $data['imgAlt'];

第三,我将想要显示的内容存储在一个变量中。我计划显示的 HTML 看起来像这样

$html = printf("<div style=\"text-align:center; max-width:270px; white-space:normal; word-wrap:break-word; border-left:1em solid transparent; border-right:1em solid transparent; text-overflow: ellipsis; float:left;\">
        <a href=\"%s\">
            <img style=\"width:270px; height:232px; margin-bottom:40px; border-radius:45px; -moz-border-radius:45px; -webkit-border-radius:45px; box-shadow:0px 0px 3px #fff; -moz-box-shadow:0px 0px 3px #fff; -webkit-box-shadow:0px 0px 3px #fff;\" src=\"images/recentshoots/%s\" alt=\"%s\" />
            <p>%s</p> <br /></a>
        </div>", $link, $image, $imgAlt, $title);

接下来,我想将每页 20 个项目循环到每行 4 个项目中。这是我遇到麻烦的地方。我的问题是 $title 中的字符数总是不同,因此布局会分开。起初,尝试了一种使用 css 和 php 执行 str_pad() 的简单方法,但它似乎不适用于空格。我总是得到一些比其他容器更高的容器,这会扭曲我的行。所以我在这个平台上做了一些研究,以模仿别人的例子。

我发现的内容有些问题,因为我看到的示例缺少信息,我需要了解如何修改自己的示例。我已经看到它是用 foreach 和 while 循环完成的。有人可以帮我找到更好地理解这一点的方法吗?

如何循环检索到的数据并确保每行只有 4 个存在于 20 个项目的页面中?非常感谢你的帮助。我从这样的事情开始

$startingPoint = 1;
echo "<div class=\"row\">";
foreach($startingPoint < 4){ //this foreach is not even starting the right way, how can I fix this?
    echo $html;
}

我可以使用 foreach 吗?还是一个while循环?还是做?

哪一种是最好的解决方案,也是最快或最有效的方法?代码越短越好。

【问题讨论】:

    标签: php mysql foreach while-loop do-while


    【解决方案1】:

    你可以试试这个代码。完整的分页和视图:

    示例:index.php

    <?php
        //get page id for pagination and limit query
        $limit = 4;
        if(isset($_GET["page"]))
            $page = intval($_GET["page"]);
        else
            $page = 1;
    
        $total = $limit * $page;
        $start = $total - $limit;
    
        //GEt data from database. I have used mysqli for testing purpose.
        $conn=mysqli_connect("localhost","root","","dbname");
        $result = mysqli_query($conn, "SELECT * FROM table WHERE status = '1' ORDER BY id DESC LIMIT $start, $limit");
        $total = mysqli_num_rows($result);
    ?>
    
    
        <!--Your html code what you want-->
        <table>
            <tr>
                <th>Title</th>
                <th>Image</th>
                <th>Link</th>
            </tr>
             <!--loop inside html-->
            <?php while($data = mysqli_fetch_assoc($result)) { ?>
                <tr>
                    <td><?php echo $data['title']; ?></td>
                    <td><img src="<?php echo $data['image']; ?>" alt="<?php echo $data['imgAlt']; ?>"> </td>
    
                    <td><a href="<?php echo $data['link']; ?>">Link</a></td>
                </tr>
            <?php } ?>
        </table>
    
    <?php
        /**======== Pagination Url generate=============*/
        $totalPages = ceil($total/$limit);
        if($page <=1 ){
            " <span style='font-weight: bold;'> < Prev </span> ";
        }else{
            $j = $page - 1;
            echo " <a href='index.php?page=$j'>Prev</a> ";
        }
    
        for($i=1; $i <= $totalPages; $i++){
            if($i<>$page){
                echo " <a href='index.php?page=$i'>$i</a> ";
            }else{
                echo " <span style='font-weight: bold;'>$i</span> ";
            }
        }
        if($page == $totalPages ){
            echo " <span style='font-weight: bold;'>Next ></span> ";
        }else{
            $j = $page + 1;
            echo " <a  href='index.php?page=$j'>Next</a></span> ";
        }
    ?>
    

    【讨论】:

    • 我喜欢这里的内容,我只是有几个问题。有没有办法通过某种信使说话?我的分页类在被调用时看起来像这样。 '$start = $pagination->prePagination();'我将它添加到我的 sql 查询的正上方。页面的限制是用 $limit 设置的。对您的示例有任何建议或修改可以进一步帮助我吗?因为您的分页示例很棒,但是我已经为它设置的内容很容易维护和重用。感谢您的宝贵时间。
    • 另外,添加 HTML '
      ' 和结尾的 "
      " 的最佳位置在哪里?我应该将它包含在 $html 变量中吗?还是在while语句之前?我已经看到了很多例子,以至于开始混淆谁的版本是正确的、更好的或更有效的。
    • 我很高兴@RookieRecruits。不用担心你可以使用任何你想要的允许 php 的东西,不要感到困惑。我再次编辑并初始化了一个表格,以便您更好地理解。你可以使用'
      '。您可以使用自定义分页功能,但该功能始终包含我提供的此类代码。您可以使用自己的查询方法,并且数据总是相同的。您可以在 SqlQuery 中进行排序(排序依据)。
    【解决方案2】:

    Foreach 循环用于数组数据类型,而 while 循环可用于布尔值等。

    您正在寻找的是一个 for 循环,它允许您设置一个计数器,并且每次运行循环时都会添加一个计数器。一旦满足表达式,它就会结束循环。

    for($i = 1; $i == 4; $i++)
    {
         echo 'Loop ' . $i . ': This will loop 4 times';
    }
    

    但是,您可以使用这个 sn-p 修复您的 foreach:

    $startingPoint = [1,2,3,4];
    foreach($startingPoint as $start)
    {
         echo $html;
    }
    

    由于数组内有4个项目,循环将继续4次。

    您的 SQL 返回多于一行的数据,从而创建 $data 成为多维的,因此您的循环可能无法按其编写方式工作,您可以试试这个:

    for($i = 1; $i >= $limit; $i++)
    {
        print_f(<!-- html here -->, $data[$i]['column']);
    }
    

    【讨论】:

    • html“row”类应该在这个循环里面还是外面?哪里最好打开和关闭标签?现在,它在“printf”之外。它应该在“printf”里面吗?感谢您的帮助。
    • 好吧,假设一行分隔 html 的每一层,它应该是 $html 的分隔符,因此在您打印 html 之前和之后进入循环内部。 @RookieRecruits
    • 如果我理解正确,该行应该将 html 的前 4 次迭代与接下来的 4 次迭代分开,依此类推,直到达到总共 20 或 5 行。
    • 如果您将周期分开,那么它将超出循环。如果你想把所有东西分开,它就会进入循环。 @RookieRecruits
    • 我试过了,但每页只显示 1 个。不过,我感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2019-06-17
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多