Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Before we leave the topic of loops behind, I want to talk about array pointers and show you how they work. It may seem like a technical detail, but it will become important later when we start working with databases. PHP maintains a pointer that points to one of the items in an array. That item is referred to as the current item. By default, that's always the first item in the array. When we start looping through arrays using something like Foreach, PHP moves the pointer down the array as it assigns each value to the loop's variable. Moving the pointer to the next value is how PHP keeps track of which item you're working with now and what the next item is that it should give you after that.
But loops are not the only way to move pointers around. Let's take a look. Let's create ourselves a little workspace by using basic dot html. And we'll use Save As, and then we're going to create pointers.php. To begin with, let's just give ourselves a little area here, php, and we'll put in array of ages. I'll also change the title to be pointers. Alright. So this is the array that we were working with before. So the pointer, by default. The current item that's being pointed at in this array is the first item, four.
As we do a loop through there, the pointer moves. So, the first time, it's pointing at four. The second time through the loop, it's now pointing at eight. And then it's pointing at 15, and so on. It moves all the way down, and when it gets to the last one. Then it moves one more and says, oops, there's no more items, I must be done. And so the loop ends. We can take a look at this current pointer value by using the current function. So here it is, just current, and then we pass in the array. That'll tell us what the current value that it's pointing to is. Let's try that. Let's save it.
Let's go back to Firefox. And instead of break, let's open up pointers.php. So there it is, it is pointing at the item four, I've got the one if front of it just so we can tell between each of these tests that we run. So here's four, now we can tell the pointer to move to the next item manually by using the next function. So here's, this is just simply next ages. We're just saying hey, advance the pointer for ages to point to the next item. And then will once again echo back what the current item it's pointing to is.
This time, I've got a 2 in front of it so we can tell the difference. I'll save that. Let's go here. And there it is. It's pointing at eight. See how that works? Let's go back and let's just do a couple more here. Let's tell it to go two more times and then we'll do a third one and we'll ask it what it is for the third time. All right. It went 2 this time, so we're at 16, so you've skipped over the 15, and now we're pointing at 16. We can also have it go backwards by using Prev, short for "previous," p-r-e-v, and that's going to move it backwards. So tell ages to go backwards one, and then we'll use number 4 to see what the value's at now.
And there it is, it's at 15, and my backwards one. We also have two more that we'll look at together, which are reset, so reset will move the pointer back to the first element, and end will tell it to shoot all the way to the end, the last element. I've numbered those 5 and 6, let's take a look at that real quick. There we are. The first element and the last element. And now, just so that we can see what happens when we're at the end, let's go ahead and do next one more time. So, here it is, it's at the end, we're going to call next after the last element,and that's going to be 7. Let's see what that gives us back.
Go to return. We get back nothing, right? So that's how it knows that it's done. When it retrieves the last item, the last item is null then it knows that it's done. Okay, so how is this useful? Let's take a look at a while loop example that will illustrate how it works in practice and which is going to set the stage for working with database records. Switch back over here, and let's just put a br tag, and then we'll put in my while example. So, it's a while loop that moves the array pointer. This is very similar to what foreach does.
Notice that in the condition of our while loop, right here, this expression, that we're doing an assignment, not a comparison. That is a single equal sign, not a double equals. What we're doing, is we're. Assigning a value from current to age. And we're also testing then to see if that assignment was successful. If it returned a value, then the expression is going to evaluate to true. But if it returned null, in other words we got to the end of it, then this expression will evaluate to a Boolean false.
Null will be considered false. And so at that point it will exit. So what we're essentially saying is, get the item that the array pointer points to. Assign it to age. And if that is an item. If you successfully got one, then execute the loop. If you did not successfully get an item, well then exit the loop. We're all done. And then of course, we do have to increment inside the array using next. That'll move the pointer to the next item. So that now, current will fetch something different the next time through the loop. So as I said, this is how foreach works. So why not just use for each step? Well, I want you to see this technique because when we start working with databases, we are going to use something very similar.
We'll retrieve many rows of data from a database table as an array and then move through each row, advancing the pointer as we go. But we can't use foreach for this, because the database pointers are not exactly the same as the array pointers. They're similar, but not the same. And the database pointers are going to be moved by the database driver. Each time that we request a row. Each time that we do this assignment here. It's going to increment the pointer as soon as it finishes making that assignment. Foreach and next won't be able to move those database pointers.
They're going to work only on PHP arrays. Not on these database arrays that we'll be working with later. So let's just try out this code real quick. Let's save it. We'll go back to. Firefox, let's try and reload the page. Notice that nothing happened. Well why is that? Well, it because current is still pointing at null, remember? Current here was null, so what is it here? It's still null, nothing has changed. We need to reset the pointer back to the beginning for ages. And now. We come back here. You'll see that it zips back to the beginning, and it starts going through with each one for all the way through 'til it gets to 42, and then the last one is null so the loop ends.
So I hope you understand how pointers work, and this gives you some insight into how foreach works and also how you can manipulate those pointers yourself. But more importantly I want to make sure that you're familiar with this syntax using the while loop, because that's what we're going to be using when we start working with databases.
Get unlimited access to all courses for just $25/month.Become a member