PHP:在两个div中拆分mySQLi数组?

时间:2016-04-28 21:07:29

标签: php mysql arrays mysqli

我目前正在开发一个调用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 <= $rowcount/2)之类的东西,但无济于事。任何帮助都会非常感激 - 我对mySQL很新,而且对PHP知之甚少,所以这个让我感到难过。

4 个答案:

答案 0 :(得分:0)

添加一个控制变量,例如&#34; $ i&#34;。每个循环为$ i添加+1。并检查$ i是否达到行数的一半。如果达到close 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>

答案 1 :(得分:0)

您可以在前半部分使用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>

答案 2 :(得分:0)

我建议您制作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 
?>

答案 3 :(得分:0)

拥有一个计数器是一个想法,我不会讨论在视图中使用模型逻辑;)

嗯,解决方案是:

<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>