M
MeshWorld.
PHP Laravel Arrays 6 min read

Get the Last Element of an Array in PHP and Laravel

Vishnu
By Vishnu
| Updated: Mar 27, 2026

PHP and Laravel give you at least five ways to get the last element of an array. Some are one-liners. Some have side effects. The right choice depends on whether you’re in plain PHP, working with Laravel helpers, or dealing with an Eloquent collection. This guide covers all five — with notes on what each one actually does to your array.

:::note[TL;DR]

  • Arr::last($array) — Laravel’s safest option, no side effects, supports a filter callback
  • last($array) — Laravel global helper, same result, shorter syntax
  • end($array) — plain PHP, fast, but moves the internal array pointer (side effect)
  • array_slice($array, -1)[0] — plain PHP, no side effects, slightly more verbose
  • $collection->last() — Eloquent / Collection method, works on objects too :::

How do you get the last element with Laravel’s Arr::last()?

Arr::last() is the most capable option in Laravel. Import the class and call it statically:

use Illuminate\Support\Arr;

$languages = ['PHP', 'Python', 'Ruby', 'Go', 'Rust'];

$last = Arr::last($languages); // 'Rust'

It takes three parameters: the source array, an optional callback for conditional filtering, and an optional default value if nothing matches.

The callback form is useful when you don’t just want the last item — you want the last item that passes a condition:

$numbers = [12, 24, -8, 55, 100, 1331, 766, 65];

$lastLargeNumber = Arr::last($numbers, fn($value) => $value >= 100);
// Result: 766 — the last item that's 100 or above

If no item passes the test, Arr::last() returns null by default. Pass a third argument to return something else:

$lastOver2000 = Arr::last($numbers, fn($value) => $value >= 2000, 0);
// Result: 0 — fallback because no value meets the condition

Arr::last() never modifies the source array. No side effects.

How does the global last() helper work?

last() is a global Laravel helper. It’s a shortcut for Arr::last() without the import:

$carBrands = ['Maserati', 'Tesla', 'Tata', 'Aston Martin', 'Audi', 'Alfa Romeo'];

$final = last($carBrands); // 'Alfa Romeo'

It doesn’t accept a callback. If you need filtering, use Arr::last(). If you just need the last value, last() is the shortest form.

The scenario: You’re debugging a pipeline that processes steps sequentially. You want to log whatever the final step was. last($steps) in the log line is three words, readable, and doesn’t require an import. That’s the whole reason it exists.

What does PHP’s end() do — and why is it a problem?

end() is built into PHP. It returns the last element and moves the array’s internal pointer to the end:

$fruits = ['Orange', 'Apple', 'Grapes', 'Kiwi', 'Mango'];

$last = end($fruits); // 'Mango'

That sounds fine until you loop over the same array afterward. PHP’s next(), prev(), current(), and reset() all depend on that internal pointer. Moving it with end() can break a foreach-style iteration that’s happening elsewhere on the same array reference.

:::warning end() modifies the internal array pointer of the variable you pass to it. If the same array is used in a loop or passed by reference anywhere else in scope, the position change can cause unexpected behavior. Prefer Arr::last() or array_slice() when side effects are a concern. :::

For one-off scripts or cases where you control the full array lifecycle, end() is fine. In shared code or class methods, it’s a trap.

How does array_slice() give you the last element without side effects?

array_slice($array, -1) returns a new one-element array containing the last item. Access index [0] to get the value:

$scores = [88, 72, 95, 61, 84];

$last = array_slice($scores, -1)[0]; // 84

No pointer movement. No imports. Works in any PHP version. The downside: it’s more verbose than last() and creates an intermediate array in memory. For single elements on a small array, that’s irrelevant. For tight loops on large arrays, prefer end() or Arr::last().

How do you get the last item from an Eloquent Collection?

Eloquent query results return a Collection object. It has its own last() method:

$users = User::orderBy('created_at')->get();

$newestUser = $users->last();

This returns the last Model in the collection — the full object, not just a scalar value. You can also pass a callback to get the last item matching a condition:

$lastAdmin = User::all()->last(fn($user) => $user->role === 'admin');

If no item matches, it returns null.

The scenario: You’re building a “last activity” widget on an admin dashboard. You’ve already loaded a collection of events for the current session. Rather than running another query, $events->last() pulls the most recent one from the in-memory collection. One method call, no extra DB hit.

See Create a Laravel Collection from an Array if you need to wrap a plain array as a Collection first.

Which method should you use?

SituationBest choice
Laravel project, no filter neededlast($array)
Laravel project, need conditional filteringArr::last($array, $callback)
Plain PHP, no Laravel availablearray_slice($array, -1)[0]
Plain PHP, you own the full array scopeend($array)
Eloquent Collection$collection->last()

Summary

  • Arr::last() is the most flexible Laravel option — it supports callbacks and defaults, with no side effects.
  • last() is the global helper shortcut. Good for the simple case.
  • end() moves the internal array pointer — use it carefully in shared code.
  • array_slice($array, -1)[0] is the clean plain-PHP option with no side effects.
  • $collection->last() works on Eloquent results and supports an optional callback.

FAQ

Does last() work on associative arrays? Yes. Both last() and Arr::last() return the last value regardless of whether the keys are integers or strings.

What does Arr::last() return if the array is empty? It returns null by default. Pass a third argument to specify a different fallback value.

Can I use Arr::last() without importing the class? No. You need use Illuminate\Support\Arr; at the top of the file. Alternatively, use the global last() helper which requires no import.

Is there a way to get the last key as well as the last value? Use array_key_last($array) (PHP 7.3+) for the key, then $array[array_key_last($array)] for the value. Arr::last() only returns the value.

Does end() work on empty arrays? It returns false on an empty array. Check with empty($array) before calling end() if the array might be empty.