开发者

What does this statement mean?

While

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

what does this statement mean:

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

Please help. I have not seen the || operator inside other than an if or while statement. Tha开发者_高级运维nk you.

EDIT 01:

This is the original function where it is used to find the number of a particular day in a date range:

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

This was not created by me. But I wanted to edit this function because when the end day is a Saturday, it is taking the following Sunday into account too, which is wrong.


It's just a compound boolean expression that returns true if any of the following four sub-expressions is true:

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


You were right in one of your comments that the boolean expression gets added as to the integer as 1 or 0.

If you cast a boolean value to an integer then FALSE gets 0 and TRUE gets 1.

If you add variables with different datatypes and one of the variable is an integer, then the other variables are casted to integers, which makes:

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

Two links that explain what happens if you use + on different data types and what happens if a certain datatype is casted to an integer:

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


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

The statement will evaluate (nothing is assigned in the example) to a boolean value of true/false.

The statements are effectively computed in order

For example

true || false || false => true

false || false || false => false

This means that if any of the "subexpressions" are true then the whole expression will evaluate to true. This can be assigned to a variable $v = expression, or use in an if (expression)


|| is the logical OR operator. Please see the documentation for more

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜