我怎么能在每11行跳过一张表的同时,每10行做一件事呢


How can I loop through a table skipping every 11th row while doing something on every 10th loop?

这是我思考它应该如何工作的过程。

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

这里有一个$rawCounter,它计算迭代的行数,还有一个$fancyCounter,它保持行数与您发布的行数一致。

while($row=$result->fetch_assoc()){
     $rawCounter++;
     if ($rawCounter%11!==0){
         $fancyCounter++;
     } 
     if ($rawCounter%10===0){
         //Do Something
     }
}

下面是一个示例,给出了您的示例输出。

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

试试这个,

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

这样就可以了。你试图在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";
        }
    }
 }