【问题标题】:What does this statement mean?这个声明是什么意思?
【发布时间】:2026-02-09 05:25:01
【问题描述】:

虽然

$w is an Array ( [0] => 4, [1] => 6 )

这句话是什么意思:

$day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7);

请帮忙。除了 if 或 while 语句之外,我还没有看到内部的 || 运算符。谢谢。

编辑 01:

这是用于查找日期范围内特定日期的原始函数:

// find number of a particular day (sunday or monday or etc) within a date range
function number_of_days($day, $start, $end){
    $w = array(date('w', $start), date('w', $end));
    return floor( ( date('z', $end) - date('z', $start) ) / 7) + ($day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7));
}

这不是我创造的。但是我想编辑这个函数,因为当结束日是星期六时,它也会考虑到下一个星期日,这是错误的。

【问题讨论】:

  • 写此声明的人应该被鞭打

标签: php operators


【解决方案1】:

它只是一个复合布尔表达式,如果以下四个子表达式中的任何一个是true,则返回true

  • $day == $w[0]
  • $day == $w[1]
  • $day &lt; ((7 + $w[1] - $w[0]) % 7)

【讨论】:

    【解决方案2】:

    在您的一个 cmets 中,布尔表达式被添加到整数 10 是正确的。

    如果将布尔值转换为整数,则 FALSE 会得到 0TRUE 会得到 1

    如果您添加具有不同数据类型的变量并且其中一个变量是整数,那么其他变量将被强制转换为整数,这使得:

    var_dump(1+true);
    // Result: int(2)
    

    两个链接解释了如果您对不同的数据类型使用 + 会发生什么,以及如果将某个数据类型转换为整数会发生什么:

    http://php.net/manual/en/language.types.type-juggling.php
    http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting

    【讨论】:

    • 感谢您的链接。我将通过它们。有“我的一个 cmets”的答案似乎已被删除!
    【解决方案3】:
    $day == $w[0] || $day == $w[1] || $day < ((7 + $w[1] - $w[0]) % 7);
    

    该语句将评估(在示例中未分配任何内容)为布尔值 true/false。

    语句按顺序有效计算

    例如

    true || false || false => true
    
    false || false || false => false
    

    这意味着如果任何“子表达式”为真,则整个表达式的计算结果为真。这可以分配给变量$v = expression,或者在if (expression)中使用

    【讨论】:

    • 另请注意,如果一个“子表达式”的计算结果为真,则不再测试剩余的“子表达式”。这称为 短路en.wikipedia.org/wiki/Short-circuit_evaluation
    • 这是我没有想到的,确实很有用。感谢您的链接!
    【解决方案4】:

    ||是逻辑 OR 运算符。更多详情请查看documentation

    【讨论】: