如何在每第10个循环执行某些操作的同时遍历每跳过第11行的表?

时间:2015-11-02 22:31:08

标签: php mysql

这是我认为应该如何运作的思考过程。

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) && ($row % 11 != 0)) {
        $counter++;
        if ($counter % 10 == 0) {
         // Do something.
        }
    }
}

它应该如何工作的例子:

第1行=计数器1
第2行=计数器2
第3行=计数器3
第4行=计数器4
第5行=计数器5
第6行=计数器6
第7行=计数器7
第8行=计数器8
第9行=计数器9
第10行=计数器10
第11行=跳过
第12行=计数器11
第13行=计数器12
第14行=计数器13
第15行=计数器14
第16行=计数器15
第17行=计数器16
第18行=计数器17
第19行=计数器18
第20行=计数器19
第21行=计数器20
第22行=跳过
第23行=计数器21

为了进一步参考,这里是我写的一整段代码,用于提醒用户在我的网上商店,如果他们的购物车中有10张门票,他们将获得下一张免费的添加它。谢谢Jakar

$fancyCounter = 1;

if ($result->num_rows > 0) {

     // output data of each row
     while($row = $result->fetch_assoc()) {
         $rawCounter++;
        if ($rawCounter % 11 !== 0) {
            $fancyCounter++;
        }
        else {
            $fancyCounter = 1;
        }
    }
}
$result->close();

if ($fancyCounter % 11 == 0) {
    $freeTicketAvailable = 1;
} else {
    $freeTicketAvailable = 0;
}

3 个答案:

答案 0 :(得分:1)

试试这个,

<?php

$counter = 1;

while ($counter <= 33) {

    if ($counter % 10 == 0) {
        // On 10.
        echo "Do Something<br/>";
    } else if ($counter % 11 == 0) {
        // On 11.
        echo "Skip<br/>";
    } else {
        // Other numbers.
        echo $counter . "<br/>";
    }
    $counter++;
}

?>

您需要替换while();内的条件以适合您。

<强>输出

1 2 3 4 5 6 7 8 9 Do Something Skip 12 13 14 15 16 17 18 19 Do Something 21 Skip 23 24 25 26 27 28 29 Do Something 31 32 Skip

答案 1 :(得分:1)

这应该这样做。您试图在while条件中将数组($ row)除以一个数字,即使在PHP中也可能未定义;)

if ($result->num_rows > 0) {  
    $skipCounter = 0;
    $tenCounter = 0;
    $counter = 0;
    while($row = $result->fetch_assoc()) {
        ++$skipCounter;
        if ($skipCounter == 11) {
          $skipCounter = 0;
          continue;
        } 
        ++$counter
        ++$tenCounter;
        echo "Counter: ".$counter;
        if ($tenCounter  ==  10) {
           $tenCounter = 0;
           echo "Do something";
        }
    }
 }

答案 2 :(得分:1)

在这里,有一个$rawCounter计算迭代的行数,$fancyCounter可以计算行数。

while($row=$result->fetch_assoc()){
     $rawCounter++;
     if ($rawCounter%11!==0){
         $fancyCounter++;
     } 
     if ($rawCounter%10===0){
         //Do Something
     }
}
提供示例输出的

Here is an example

如果您需要将行号和计数器号分开,您还可以使用$counter$skipCount,并始终增加$counter并仅增加$skipCount $counter%11==0并获得您想要的计数器(即Row 12 = Counter 11, Row 23 = Counter 21),您可以使用echo "Row {$counter} = Counter ".($counter-$skipCount)