2014-05-18 115 views
0

我想创建多列表的记录与每个列表4记录而不知道有多少记录。但是,我无法弄清楚如何处理数学。我手动输入$ n == 5 || $ n == 9等知道它是有条件的,并不能完全解决问题。任何人都可以帮助我如何处理。而且,只有在记录总数不能被4除以4的情况下,下面的列表才能正常工作。如果可以,它将在最后创建一个空列表。创建每4个记录的列表

$query = "SELECT * FROM `table` WHERE `field` = $whatever"; 
if ($result = $con->query($query)){ 
$n = 1 
$row_cnt = $result->num_rows; 
$total_lists = round($row_cnt/4, 0); 
$current_list = 1; 
echo "<ul>List $current_list of $total_lists"; 
    while ($row = $result->fetch_assoc()) { 
    echo "<li>$row['something']</li>"; 
     if ($n == 5 || $n == 9 || $n == 13 || $n == 17 || $n == 21 || $n ==25 || $n ==29 || $n == 33 || $n == 37 || $n == 41 || $n == 45 || $n == 49 || $n == 53 || $n == 57 || $n == 61 || $n == 65 || $n == 69 || $n == 73 || $n == 77){ 
     echo "</ul>"; 
     $current_list = $current_list + 1; 
     echo "<ul>List $current_list of $total_lists"; 
     } 
    $n = $n + 1; 
    } 
echo "</ul>"; 
} 

在此先感谢您的帮助。 :)

解决:

$query = "SELECT * FROM `table` WHERE `field` = $whatever"; 
if ($result = $con->query($query)){ 
$n = 0 
$row_cnt = $result->num_rows; 
$total_lists = ceil($row_cnt/4); 
$current_list = 1; 
echo "<ul>List $current_list of $total_lists"; 
    while ($row = $result->fetch_assoc()) { 
     $n++; 
    echo "<li>$row['something']</li>"; 
     if ($row_cnt > 4) { 
    if ($n % 4 === 0) { 
    echo "</ul>"; 
    $current_list = $current_list + 1; 
    echo "<ul>List $current_list of $total_lists"; 
     } 
     } 
    } 
echo "</ul>"; 
} 
+1

有人听说过模运算符:http://www.php.net/manual/en/language.operators.arithmetic.php? – CodeZombie

+0

或者,您可以将数组结果('array_chunk()')四舍五入,然后将它们分组为四,然后相应地循环它们。 – user1978142

回答

2

你其实并不是太遥远的轨道,从你可能想干什么,你只需要使用一个额外的工具来完成它:在%或模运算符。

模数运算符将返回除法问题的其余部分:

$x = 5 % 2; // 1 

在你的逻辑寻找,你的动作需要采取当你的增量器($n)减1除以4将具有的0剩余:

if (($n - 1) % 4 === 0) 
{ 
    //your <ul> insertion could go here. 
} 

下面是PHP手册页面的链接讨论数学运算:

http://us1.php.net/manual/en/language.operators.arithmetic.php

+0

非常感谢!第一次遇到模数运算符,它适用于我的情况! :) –

+0

顺便说一下,如果记录的总数可以平均除以4,我仍然有最后一页是空白的。我想我可以用另一种愚蠢的低效方式来处理:p –

+0

@MichaelEugeneYuen你有' $ current_list'变量(跟踪你当前的列表),并且你之前计算了要输出的列表总数('$ total_lists')。你可以检查这两个数字是否相等。如果他们这样做,你可以在打开最终的空白列表之前将其“断开”:http://us2.php.net/break – myesain

0

或者,您可以在数据库结果上使用简单的array_chunk()。提供适当的分组(在本例中为四),并通过foreach循环它们。考虑这个例子:

// dummy data (values from db) 
$values_from_db = array(
    array('id' => 1, 'something' => 'list1'), 
    array('id' => 2, 'something' => 'list2'), 
    array('id' => 3, 'something' => 'list3'), 
    array('id' => 4, 'something' => 'list4'), 
    array('id' => 5, 'something' => 'list5'), 
    array('id' => 6, 'something' => 'list6'), 
    array('id' => 7, 'something' => 'list7'), 
    array('id' => 8, 'something' => 'list8'), 
    array('id' => 9, 'something' => 'list9'), 
); 

$values_from_db = array_chunk($values_from_db, 4); // group them by four's 

?> 

<?php foreach($values_from_db as $key => $value): ?> 
    <ul style="list-style-type: none;"> 
    <?php foreach($value as $index => $element): ?> 
     <li><?php echo $element['id'].'.'.$element['something']; ?></li> 
    <?php endforeach; ?> 
    </ul> 
<?php endforeach; ?> 
+0

谢谢。我会试试这个,也:) –

相关问题