# Why is there == 0 near some modulo in PHP?

Hello, New to PHP and have seen a few modulo examples in PHP that includeds a `== 0`. For example:

``````\$myVar1 = 5
5%2 == 0
``````

Why is the `== 0`? Why do we need it if we just divide && check if there is (and what is) the remainder ?

Correct me if Iâm wrong, but `==` means it equals the ending value which is `0`. A single `=` means that you append that value to the variable which is `\$myVar1`.

Mostly the way I have seen the code snippets provided is in a loop:

``````<?php

for(\$i=0; \$i<10; \$i++)
{
if( \$i % 3 == 0 )
{
echo '<br>';
}
echo \$i. ', ';
}//
``````

Try running the script and notice when the modulus is equal to zero a line-feed is echoed.

1 Like

For testing if the remainder is equal to that value.

\$var % 2 == 0 // test for an even number
\$var % 2 == 1 // test for an odd number

if we just divide && check if there is (and what is) the remainder ?

This code is doing rather opposite: it checks whether there is no remainder. (or, more literally, whether remainder is zero)

While when you want to know what the remainder is, you have to write it as

``````\$remainder = \$myVar % 2;
``````

Perhaps an easier way to understand what `\$var %2 == 0` does

Expand the code out to:

``````\$remainder = \$var % 2;
if (\$remainder == 0)
``````

I like the way PHP Manual explanation that the % is:

Modulus Arithmetic Operator
\$a % \$b is the Remainder of \$a divided by \$b.

John, wouldnât it be more correct to say that it is the pre-remainder value, and not exactly the remainder value,

Why? Because if we follow the algorithm to calculate remainder in general:

``````Phase A)              y / x = sum.
Phase B)              If sum is a fracture (float), do:
Phase C)              sum / x = pr (pre-remainder value).
Phase D)              Isolate r (remainder value) from pr as by counting only the integer from the pr.

And in a more numerical version:

Phase A)              5 / 2 = 2.5 .
Phase B)              Given that the sum is a fracture (float) do:
Phase C)              2.5/ 2 = 1.25 (pre-remainder value).
Phase D)              Isolate 1 (remainder value) from 1.25 as by counting only the integer from the 1.25 .
``````

So John, I wonder if the guy who wrote the manual actually meant to the pr (pre-remainder value) and not to the actual remainder, because I see no point in dividing the actual remainder as one could understand from the manualâŚ

I think you may be confusing a simple math operation with a more complex calculus function or something.

Itâs more like

``````\$dividend = 23;
\$divisor = 5;
\$quotient = floor (\$dividend / \$divisor);
\$modulus = \$dividend - (\$divisor * \$quotient);
``````
1 Like

The result is an integer (verifed with var_dump(\$i % 3) ) and considering the result is of a âBlack Box Functionâ I should imagine the algorithm is processed using an arithmetic binary routine. Division is not easy or necessary when only an integer result is required.

A long time ago I learnt Assembler and Machine language arithmetic because it was part of the course. Addition and subtraction was understandable but multiplication and division was horrendous and best forgotten.

1 Like

I am sure Iâm not confusing. Itâs just a stepped algorithm to extract the remainder even when in mind it might seem a very simple process. For some itâs just more comfortable to use an algorithm, or from any reason they would prefer this way.

1 Like

The modulus (its correct name) doesnât rely on division for its calculation. The hours minutes and seconds on an analog clock use it with no division required.

Modulo arithmetic simply mans counting to a given number over and over again and never going any higher,

The hours on a clock are %11 + 1.

1 Like

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.