+ 1
PHP
Someone please explain the output: for ($i = 1; $i < 8; $i++) if(5 % $i==0 && $i != 1) echo 8 % $i++; else echo $i++; //output : 1337.
4 ответов
+ 2
$i = 1:
else is executed and because of postfix 1 is printed
Next iteration $i =3 cause the postfix increased the value and the for loop increased the value too. 5 %3 =2 so else is executed again.
Next iteration $i = 5 (same reason as before) and now 5 %5=0 and 5 != 1 so echo 8%5 is executed cause $i++ is postfix again. 8%5=3 so 3 ist in printed.
Now $i =7 and again echo is executed.
In the next iteration $i would be 9 so the for condition $i <8 is wrong and for loop is ended.
+ 2
* FIRST
$i = 1
$i < 8 (true)
5 % $i == 0 (true) AND $i != 1 (false)
* Evaluation true AND false yields false
* So execute `else` block
print $i (1) then increment $i => 2
$i++ in loop declaration increment $i => 3
* NEXT
$i = 3
$i < 8 (true)
5 % $i == 0 (false) [because 5 % 3 => 2]
* Here short circuit evaluation ignores `$i != 1` because left-hand operand evaluates to false
* So execute `else` block
print $i (3) then increment $i => 4
$i++ in loop declaration increment $i => 5
* NEXT
$i = 5
$i < 8 (true)
5 % $i == 0 (true) AND $i != 1 (true)
* Evaluation true AND true yields true
* So execute `if` block
print `8 % $i` (3) then increment $i => 6
$i++ in loop declaration increment $i => 7
* NEXT
$i = 7
$i < 8 (true)
5 % $i == 0 (false) [because 5 % 7 => 5]
* Here short circuit evaluation ignores $i != 1 (because left-hand operand evaluates to false
* So execute `else` block
print $i (7) then increment $i => 8
$i++ in loop declaration increment $i => 9
* NEXT
$i = 9
$i < 8 (false) # Loop ends
Hth, cmiiw
+ 2
No worries, if you learn and practice regularly you'll get the hang of it pretty soon 👍
And this was indeed a tricky one.
+ 1
Thanks to both of you for explaining the code. But still I have to look at your explanation again as I am not good in PHP till now.