Php 我如何在每第11行跳过一个表,而在每第10行执行一次操作时循环一次?

Php 我如何在每第11行跳过一个表,而在每第10行执行一次操作时循环一次?,php,mysql,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

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

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;
}
试试这个

<?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
做点什么
跳过
12
13
14
15
16
17
18
19
做点什么
21
跳过
23
24
25
26
27
28
29
做点什么
31
32

跳过

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


这里有一个
$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
,以获得所需的计数器计数(即
第12行=计数器11,第23行=计数器21
),您可以使用
echo“Row{$counter}=counter”。($counter-$skipCount)

除了每隔10行和11行之外,您想对其他行执行什么操作?使用while只迭代获取的结果,并将计数增量放在循环体的顶部。将11行和10行条件放入循环内的if块中。继续;当mod 11为0时,示例输出为
第12行=计数器11,第23行=计数器21
。使用代码时,计数器和行号将相同。示例输出为
第12行=计数器11,第23行=计数器21
。根据你的代码,计数器和行号将是相同的。谢谢,伙计,这是我想要的,但我不确定它是否有效。基本上,我想为每购买10件商品提供一件免费商品,我想让客户知道,如果他们有10件商品,他们有资格获得一件免费商品。我已经拿到了,所以当他们有11件商品时,折扣适用,但我不想让他们知道是否少了一件。谢谢你的评论,原来我不明白这个问题。公认的答案似乎是完美的。为了增加一点价值,我更新了我的答案以避免分歧。这是更多的代码,但应该运行快一点。
while($row=$result->fetch_assoc()){
     $rawCounter++;
     if ($rawCounter%11!==0){
         $fancyCounter++;
     } 
     if ($rawCounter%10===0){
         //Do Something
     }
}