【问题标题】:PHP: split a mySQLi array in two divs?PHP:将 mySQLi 数组拆分为两个 div?
【发布时间】:2016-04-28 21:07:29
【问题描述】:

我目前正在处理一个调用 mySQL 数据库来填充成员列表的页面。但是,我需要将该列表分成两个相等的部分,以便一半可以浮动到左侧,另一半可以浮动到右侧。但是,我已经把这匹马打死了,仍然不知道如何拆分数组。

这是我目前拥有的:

<div class="holder">
    <?php
    $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC');
    $rowcount = mysqli_num_rows($members);
    if ( $rowcount > 0 ) { ?>
        <div class="members-left">
            <ul class="members">
                <?php while ($row = $members->fetch_assoc()) { ?>
                    <li class="member">
                        //SOME CONTENT HERE
                    </li>
                <?php } ?>
            </ul>
        </div>
    <?php } ?>
</div>

但是,我希望输出看起来像这样(假设我的表有 10 个成员):

<div class="holder">
    <!--output first half of members from table: -->
    <div class="members-left">
        <ul class="members">
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
        </ul>
    </div>

    <!--output second half of members from table: -->
    <div class="members-right">
        <ul class="members">
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
            <li class="member">...</li>
        </ul>
    </div>

</div>

我尝试设置计数器并使用 if($i &lt;= $rowcount/2) 之类的东西,但无济于事。任何帮助将不胜感激 - 我对 mySQL 非常陌生,并且对 PHP 的了解有限,所以这个让我很难过。

【问题讨论】:

  • if($i == $rowcount/2) echo '&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;

标签: php mysql arrays mysqli


【解决方案1】:

添加一个控制变量,如“$i”。在每个循环中为 $i 添加 +1。并检查 $i 是否达到行数的一半。如果达到关闭 ul 和 div 并打开新的 div 和 ul 并将 $i 设置为 0

  <div class="holder">
    <?php
    $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC');
    $rowcount = mysqli_num_rows($members);
    $i=0;
    if ( $rowcount > 0 ) { ?>
        <div class="members-right">
            <ul class="members">
                <?php while ($row = $members->fetch_assoc()) { ?>
                    <li class="member">
                        //SOME CONTENT HERE
                    </li>
                <?php
                $i++;
                 if($i>=($rowcount/2)){
                 echo '</ul></div>
<div class="members-right">
        <ul class="members">'; 
$i=0;
                    }

                   } ?>
            </ul>
        </div>
    <?php } ?>
</div>

【讨论】:

  • 非常感谢!这正是我所需要的。非常感谢队友。
【解决方案2】:

您可以在前半部分使用 for 循环,然后使用 while 循环结束后半部分,直到没有更多结果为止。

上半场

for($i = 0; $i <= $rowcount/2 && $row = $members->fetch_assoc(); $i++)

下半场

while ($row = $members->fetch_assoc())

HTML 示例

<div class="members-left">
    <ul class="members">
        <?php for($i = 0; $i <= $rowcount/2 && $row = $members->fetch_assoc(); $i++) { ?>
            <li class="member">
                // do something with $row
            </li>
        <?php } ?>
    </ul>
</div>
<div class="members-right">
    <ul class="members">
        <?php while ($row = $members->fetch_assoc()) { ?>
            <li class="member">
                // do something with $row
            </li>
        <?php } ?>
    </ul>
</div>

【讨论】:

  • 非常感谢!尽管您的解决方案不如其他解决方案那么轻巧,但它确实起到了作用。非常感谢!
【解决方案3】:

我建议您制作 2​​ 个成员数组,然后将它们打印出来。好处是您可以更好地控制成员,并且您的代码将更具可读性以供以后使用;

<?php 
$i =0;
while ($row = $members->fetch_assoc()) {
 if($i % 2 == 0)
    {
      $right_members[] = $row;
    }
 else
    {
    $left_members[] = $row;
$i++;
} 
echo '
<div class="members-right">
   <ul class="members">';
foreach($right members as $r_member){
echo '<li class="member">...</li>';
}
echo '
   </ul>
</div>';

//SAME WITH LEFT MEMBERS 
?>

【讨论】:

    【解决方案4】:

    有一个计数器是一个想法,我不会争论是否考虑模型逻辑;)

    嗯,解决办法是:

    <div class="holder">
        <div class="members-column">
            <ul class="members">
            <?php
            $members = $db->query('SELECT * FROM tableContacts ORDER BY lastName ASC');
            $rowcount = mysqli_num_rows($members);
            $i = 0;
            while ($row = $members->fetch_assoc()) {
            ?>
                <li class="member">
                    //SOME CONTENT HERE
                </li>
    
            <?
            // Check if current row is the 'middle count', creating a new column
            if ($i === ceil($rowcount / 2)) : ?>
                </ul>
            </div>
            <div class="members-column">
                <ul class="members">
            <?php endif; ?>
            <?php 
                $i++;
            }
            ?>
            </ul>
        </div>
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2021-12-29
      • 2012-04-13
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      相关资源
      最近更新 更多