Display the contents of an array with a for loop

We’ve previously used a foreach loop to display the contents of an array, but we can also use a for loop. This has a bit of a weird syntax and is a bit more complex, but gives you some extra flexibility including a built-in counter, and the ability to exit out of a loop based on that counter value or another condition.

Let’s replace our call to var_dump with a new PHP block. We’ll start our new for loop, and open up our parenthesis. For loops accept three parameters: a counter, condition, and incrementer.

Our counter will be a regular PHP variable. For some reason, it’s common practice to use an $i for counters, probably just because it’s easier to type, and perhaps it stands for “increment”. We’ll start this with a value set equal to 0. This is to account for arrays being zero-based indexes, meaning that the first key of array always starts with 0.

Our parameters are separated by semicolons. The next one is a condition. We’ll set this equal to $i < $numPosts. So, this will execute for however many posts we have, and no more. Finally, we need to iterate this counter, so we will set this to $i++ to add a value to the $i variable on every iteration.

<?php for ($i = 0; $i < $numPosts; $i++): ?>

<?php endfor ?>

We can use our curly brackets again, but one thing I didn’t mention previously when we used a foreach loop is that we also have access to the alternate syntax. Just like if & endif, we can use an alternate syntax named foreach to make things easier to process when dealing with outputting data within a loop. We can use endforeach to end the foreach loop, and we can also use endfor to end a for loop.

Within this loop we can now output values from our $posts array. Let’s create an h3 tag and use a PHP echo tag to output $posts. Remembering that we can reference arrays directly by their index, we can reference this $i variable that will initially be equal to 0, which is the first record of our posts array. And we can tack on another set of brackets to access properties within this array index, so we can call the title to output it.

We’ll do the same thing for content, but output it within a <p> tag.

<?php
$title = 'My Blog';
$posts = [
    [
        'title' => 'How to learn PHP',
        'content' => 'This is how you learn PHP.',
    ],
    [
        'title' => 'How to learn MySQL',
        'content' => 'This is how you learn MySQL.',
    ],
];
$numPosts = count($posts);
$postDisplay = $numPosts === 1 ? 'post' : 'posts';
$numPostsDisplay = "$numPosts $postDisplay";
?>
<h1><?= $title ?></h1>
<h2><?= $numPostsDisplay ?></h2>
<?php for ($i = 0; $i < $numPosts; $i++): ?>
    <h3><?= $posts[$i]['title'] ?></h3>
    <p><?= $posts[$i]['content'] ?></p>
<?php endfor ?>

And when we refresh the page, we’ll see our data being outputted from the array.

Complete and Continue  
Extra lesson content locked
Enroll to access source code, comments & track progress.
Enroll for Free to Unlock