PHP 8 logo

PHP 8.4 Array Inspection Functions

PHP 8.4 will come with four new array functions that enable and simplify inspection. Let’s dive in and take a look the benefits.


This is the second post in our PHP 8.4 themed series. You can read all about another feature, property hooks, here.

array_find

array_find($array, $callback) returns the first match (truthy) value that your callback returns.

function is_prime(int $number): bool {
    if ($number == 1) {
        return false;
    }
    for ($i = 2; $i <= sqrt($number); $i++) {
        if ($number % $i == 0) {
            return false;
        }
    }
    return true;
}

array_find([1, 2, 3, 4, 5], is_prime);
// 2

There are actually two parameters that get passed to the callback, $value and $key, in that order, so in the above example we only rely upon an array’s iteration value. We could also filter by an associative array like so:

function is_foo(mixed $value, str: key): bool {
    return $key === "foo";
} 

array_find([
    "fruit" => "apple",
    "name" => "Joe Smith",
    "foo" => "bar"
], is_foo);
// "bar"

array_find_key

Much like array_find, array_key_find inspects your array to return the first match. The difference being instead of returning the first value, you’ll get the first key.

function is_bar(mixed $value): bool {
    return $value === "bar";
} 

array_find_key([
    "fruit" => "apple",
    "name" => "Joe Smith",
    "foo" => "bar"
], is_bar);
// "foo"

array_all

array_all() works much like all() in Python, it returns a boolean based on whether all elements in your array return true in your callback function.

function is_even(int $number): bool {
    return $number % 2 === 0;
}

array_all([2, 4, 6], is_even);
// true

array_all([2, 4, 5], is_even);
// false

array_all(
    ["a" => 1, "b" => 2, "c" => 3], 
    fn($v, $k) => is_numeric($v)
);
// true

array_all(
    [1 => 1, "b" => 2, 4 => 3], 
    fn($v, $k) => !is_numeric($k)
);
// false

array_any

This will return true if any of the elements in the array match, as distinct from array_all where all must.

function is_even(int $number): bool {
    return $number % 2 === 0;
}

array_any([2, 4, 6], is_even);
// true

array_any([2, 4, 5], is_even);
// true

array_any([1, 3, 5], is_even);
// false

array_any(
    ["a" => 1, "b" => 2, "c" => 3], 
    fn($v, $k) => is_numeric($v)
);
// true

array_any(
    [1 => 1, "b" => 2, 4 => 3], 
    fn($v, $k) => !is_numeric($k)
);
// true

Final thoughts

Whilst it’s always nice to have helper functions, these don’t really do anything that array_map or array_filter already provide from a surface level perspective. Furthermore, a great many projects will have one or more of these function names to provide something resembling these implementations, making it a bit of a problem for the completely understandable and natural task of updating your PHP version. As long as this doesn’t apply to you and your projects, these functions can be a great addition to your toolbelt.

Read the RFC documentation at https://wiki.php.net/rfc/array_find.

Leave a Reply

Your email address will not be published. Required fields are marked *

Learn how your comment data is processed to reduce spam here.

Achieve your goals through technology.

Get in touch to discuss your challenges and goals, we are here to make your business succeed.

First Name
Email
Phone
The form has been submitted successfully!
There has been some error while submitting the form. Please verify all form fields again.

Or, visit our contact page here.

Our Services

Web Development

From simple landing pages to complex web applications, we have you covered.

Operational systems

Automation

By transforming repetitive, manual tasks into automated systems, you can free up precious time to actually run your business.

Maintenance

Some much needed TLC for existing projects.