我目前正在开发一个调用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知之甚少,所以这个让我感到难过。
答案 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>