You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何理解生成器中的条件语句if ($current%3 == 0 && $current%5 == 0)?

理清FizzBuzz代码中取模与==的逻辑

嘿,我来帮你拆解这个容易混淆的点~

首先得明确PHP里%(取模运算符)的作用:它会返回被除数除以除数后的余数。比如15 % 3的结果是0,因为15能被3整除,余数为0;7 % 3的结果是1,因为7除以3商2余1。

你提到的第7行代码$current % 3 == 0 && $current %5 ==0,正确的逻辑是:

  • $current % 3 == 0:判断$current除以3的余数是否为0 → 也就是$current能被3整除
  • $current %5 ==0:判断$current除以5的余数是否为0 → 也就是$current能被5整除
  • &&表示两个条件同时满足时,才会返回"fizzbuzz"

你的误解在于把这句拆成了「$current被3整除且等于0,同时被5整除且等于0」,但实际上==0是和取模运算的结果做比较,不是和$current本身比较。

举个实际的例子:

  • 当$current = 15时,15%3=0、15%5=0,条件成立,返回"fizzbuzz"
  • 当$current = 0时,虽然0%3=0、0%5=0(因为0除以任何非零数余数都是0),但通常FizzBuzz的逻辑是从1开始计数的,所以你的代码运行时应该是从1循环到某个数,自然不会触发$current=0的情况,这也是代码能正常运行的原因。

另外,贴一下那段生成器代码的大概结构,方便对照:

function fizzbuzzGenerator($start, $end) {
    for ($current = $start; $current <= $end; $current++) {
        if ($current % 3 == 0 && $current % 5 == 0) {
            yield 'fizzbuzz';
        } elseif ($current % 3 == 0) {
            yield 'fizz';
        } elseif ($current % 5 == 0) {
            yield 'buzz';
        } else {
            yield $current;
        }
    }
}

总结一下:==在这里是用来验证取模运算的结果是否为0,以此判断当前数是否能被目标数整除,而不是判断当前数本身等于0~

内容的提问来源于stack exchange,提问作者trevorpan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:02:28