Skip to content

Understand PHP Modulo: Tricks with Division Remainders

When I learned math, I didn’t really understand the modulus function. In fact, it was until I learned PHP that I understood the value of a remainder from division. PHP’s role in making websites makes the modulus operator (or modulo) much more important than it ever was in math class for me.

In this article, we’ll cover the PHP modulo operator, the mathematics behind it, and why using it for things like finding every 4th item and more are just so darn useful when you’re aiming to make great web pages.

The Core Concept: What Modular Division Means

When I was in school (I do imagine it’s different now) we learned division via a many-step process. I won’t bother to explain it in text, but sometime division is round: we know that 21/3 = 7. And sometimes it’s not. 22/3 = 7.???????. That’s how this whole “modulus”, “modulo”, or “modular division” comes to be a little important if you’re doing PHP.

Mod in PHP is useful become sometimes it’s very useful to know that the “remainder” when you divide 22 by 3 is one. Which is to say that you can clearly get at least 7 out of dividing 22 by 3, and that one “uneven” bit remains after you’ve done this.

This is useful for a few reasons. First because you may know off-hand (that is: without having to think hard) that 1/3 is expressed decimally as .33333. So I know that 22/3 = 7.33333. Because I know that 7 fits cleanly, and that I could express the remainder of my division cleanly as 1, or 1/3 = 0.33333.

What PHP Modulo Does For Us

So, these remainders. They matter a little more than just the ability to more easily find decimal fractions of numbers. How else do they matter? Primarily in that we’re able to consistently know that we have the “second of every three” items simply from knowing the remainder of dividing.

What does this allow us to do? It always us to use a PHP remainder function to cleanly label a whole set of things (say divs on a webpage) as being the “first of three”, “second of three,” and “third of three.”

I’m getting a bit ahead of myself though. First let’s make sure we understand how we write out a PHP modulo operation. Then we can get into what knowing the remainder unlocks for us in our PHP code.

Basic Calculation in using the Modulus Operator in PHP

So, I’ve told you about this magic “get the remainder” PHP functionality. It’s one of PHP’s many arithmetic operations. How do you use it? I won’t belabor it too long. Here’s how you get the remainder we discussed above for dividing 22 by 3:

$remainder = 22 % 3; // 1

If you didn’t catch it look again. That’s not the division symbol / of PHP math. For better or worse, it’s the percent % symbol. That’s the operator you need for modulo in PHP.

So like I said before, what’s powerful about the modulus operator (the humble %) is that it lets us reliably get however many values we use as the divisor, in any situation. So, if I have a line like this:

$is_odd = $i % 2;

This PHP code works to find if a number is odd. Determining odd or even in PHP code is that simple. More accurately, it’s simple if you understand the modulo operator. Which hopefully you’re well on your way to.

Technically, this works because PHP does type juggling. When I divide an even numbers by 2, there is never any remainder. So $is_odd would be 0 for a number like 6. Then for 7, $is_odd would be 1. Those are the only two value you’ll ever get for something that is mod 2 in PHP. And in PHP they can be used relatively interchangeably with false and true.

Using PHP Modulus: Every 3 Items Gets Highlighted

If I know that I’ll only get two values when something is modulo 2, I also know that I’ll only get three values for 3. To concertize that, here’s a quick run of a few digits through modulus of 3 of integers in PHP:

1 % 3; // = 1
2 % 3; // = 2
3 % 3; // = 0
4 % 3; // = 1
5 % 3; // = 2
6 % 3; // = 0
7 % 3; // = 1
8 % 3; // = 2
9 % 3; // = 0
10 % 3; //= 1
11 % 3; //= 2

We discussed that anything mod 2 in PHP will be either 0 or 1. And we can see above that anything % 3 is either 0, 1, or 2. I think you may be seeing the pattern. Any number as the “divisor” in a modulo operation will yield as results 0, 1, ..., n-2, n-1. So the last number you’ll ever get is one less than the number you’re using.

What all this means is that it’s pretty easy for us to highlight every third thing in PHP. Here’s a quick example:

$css_classes = array( 'block' );
for ( $i=0; $i < 100; $i++ ) { 
    if ( $i % 3 === 1 ) {
        $css_classes[] = 'selected';
    }
}
$classes_as_string = implode( ' ', $css_classes );
echo '<div class="'.$classes_as_string''">Number was '.$i.'<div>';

If you’re brand new to PHP, the above code sample may feel like you’ve been dunked under water. If you’ve been around, you’re likely needing no explanation here. So to help those who feel like they’re swimming right now:

  • First we’ve got an array (or list) of CSS classes. In the first line, we’re simply seeing the default CSS class as the only item in that list. Which would be addressed in CSS (for example), with .block. The final output to our code means we could highlight the correct divs by either targeting the class .selected or the compound of the two .block.selected.
  • The for loop is just an easy way for me to write code that goes through a sequence of numbers. I still always have to look it up, but the first argument to for is the starting value. The second is the “keep going condition”, and the last is what to do after an iteration through the loop. In our case, each time we’ll “increment the integer value of $i.”
  • Our if is just making use of the modulo % operator the rest of the article will be. We know that every third item will be 1 but we also know that every third could either be 0 or 2. I randomly used 1.
  • Then, if the condition was met, we add to the $css_classes array the value selected. (Somewhat explained in the first point).
  • Finally we making the CSS classes into a valid HTML statement by making the final echoed output of our block <div class="block selected">Number was 1<div>. The implode will have made array( 'block', 'selected' ) into block selected. It’ll “join” the array in its second argument with the character(s) of the first. So in our case, first element of the array block, then the  character, and then the selected element of the array.

Using PHP Modulo: Every 4th Item Highlighted

If you’ve read carefully thus far, you may be able to guess a similar code snippet to the one above would work for every fourth item to be highlighted. You’re simply going to change the 3 to a 4 so you’d have:

$css_classes = array( 'block' );
for ( $i=0; $i < 100; $i++ ) { 
    if ( $i % 4 === 1 ) {
        $css_classes[] = 'selected';
    }
}
$classes_as_string = implode( ' ', $css_classes );
echo '<div class="'.$classes_as_string''">Number was '.$i.'<div>';

You could also write it slightly differently:

$css_classes = array( 'block' );
foreach ( range( 0, 99 ) as $i ) { 
    if ( $i % 4 === 1 ) {
        $css_classes[] = 'selected';
    }
}
$classes_as_string = implode( ' ', $css_classes );
echo '<div class="'.$classes_as_string''">Number was '.$i.'<div>';

Why rewrite it this way? Because I find foreach easier to read. And I know that the range function will give me the array: [0, 1, 2, ..., 98, 99]. So the effect is identical to the code above.

What Getting Remainders does for Us in PHP

No need to belabor the point: modulus is a cool math thing. It’s also called “modulo.” And using modulos in a PHP is a great way to, among a few other things, quickly label every other, every third, every fourth, etc item in a list. Whether that list is rows of an HTML table, divs in a page, or anything else. If you absolutely need an highlighted row in PHP in some systematic may, modulo in PHP will do you well.

If you’re interested in learning more, we’ve got some great articles about math in PHP, building the best possible PHP conditionals, and doing logic in PHP. If not, good luck out there. We hope this has been helpful 🙂

Yay! 🎉 You made it to the end of the article!
David Hayes

0 Comments
Inline Feedbacks
View all comments

Or start the conversation in our Facebook group for WordPress professionals. Find answers, share tips, and get help from other WordPress experts. Join now (it’s free)!

0
Would love your thoughts, please comment.x

Most Searched Articles

Best JavaScript Libraries and Frameworks: Try These 14 in 2024

In this post, we look at the best JavaScript libraries and frameworks to try out this year. Why? Well, with JavaScript being available in every web browser, this makes it the most accessible programming language of ...

20 Best Free WordPress Themes for 2024 (Responsive, Mobile-Ready, Beautiful)

If you're looking for only the best free WordPress themes in the market for this year, then you're in the right place. We have more than enough such themes for you right ...

12 Best WordPress Hosting Providers of 2024 Compared and Tested

Looking for the best WordPress hosting that you can actually afford? We did the testing for you. Here are 10+ best hosts on the market ...

Handpicked Articles

How to Make a WordPress Website: Ultimate Guide for All Users – Beginners, Intermediate, Advanced

Many people wonder how to make a WordPress website. They’ve heard about WordPress, its incredible popularity, excellent features and designs, and now they want to join the pack and build a WordPress website of their own. So, where does one get ...

How to Start an Ecommerce Business: Ultimate Guide for 2024

Is this going to be the year you learn how to start an eCommerce business from scratch? You’re certainly in the right place! This guide will give you a roadmap to getting from 0 to a fully functional eCommerce business. ...