When was the last time you had to fetch some deeply nested data in PHP and ended up writing code that looked something like this?
$grandchild = isset( $data['parent'], $data['parent']['child'], $data['parent']['child']['grandchild'] ) ? $data['parent']['child']['grandchild'] : null;
Laravel has a function called
array_get() which would allow you to fetch the data like this:
$grandchild = array_get( $data, 'parent.child.grandchild' );
This is great, but I decided to use Laravel’s approach for inspiration and improve on it. I wrote a similar function, but I decided to extend it to not only fetch deeply nested data from an array, but also from an object.
The result is a robust utility function that allows you to easily fetch deeply nested data from a heterogeneous multi-dimensional collection using dot notation:
If we re-write our initial code conundrum using this function, it looks almost identical to Laravel’s
$grandchild = get_value( $data, 'parent.child.grandchild' );
However, the real benefit comes when we need to access a data structure that may be a mixture of arrays and objects:
In this case, we would fetch the data using the exact same syntax with
get_value()and would never encounter an Undefined index or Trying to get property of non-object notice if a key or property didn’t exist.