Destructuring Arrays
In PHP, array destructuring, also known as array unpacking, is a feature that allows you to assign elements of an array or properties of an object to separate variables in a single statement. It's a handy way to extract multiple values from an array or object at once.
The problem
Consider the following array:
$data = ['Alice', 30, 'Engineer'];
Traditionally, if you wanted to assign each of these values to a separate variable, you would have to do it individually like this:
$name = $data[0];
$age = $data[1];
$profession = $data[2];
Destructuring the array
But with array destructuring, you can do this in one line:
list($name, $age, $profession) = $data;
After this line, $name
would contain 'Alice'
, $age
would contain 30
, and $profession
would contain 'Engineer'
. You can then use these variables in your code as you see fit.
We can use the list
keyword to instruct PHP to extract the values from the $data
variable.
The variables on the left-hand side of the assignment must match the number of elements in the array. If there are fewer variables than array elements, the remaining elements will not be assigned.
An alternative syntax to the list
keyword is to wrap the variables with the []
characters. It's shorter than using list
.
[$name, $age, $profession] = $data;
However, list()
is less flexible because it only works with numerically indexed arrays and doesn't support skipping values or nested destructuring.
Associative arrays
Array destructuring works with associative arrays, too. The keys in the array do not need to be in order.
$data = [ 'name' => 'Alice', 'age' => 30, 'profession' => 'Engineer'];
['name' => $name, 'age' => $age, 'profession' => $profession] = $data;
Skipping values
You can also skip values in the array that you're not interested in by leaving empty spaces.
$data = ['Alice', 30, 'Engineer'];
[$name, , $profession] = $data;
// $name will be 'Alice', $profession will be 'Engineer', 30 is ignored
Key takeaways
- Array destructuring in PHP is a way to assign values from an array to variables in a single statement.
- The number of variables and array elements should match. If not, the remaining array elements are ignored, or extra variables get a
NULL
value. - By leaving empty spaces, you can skip over values in the array you're not interested in.
list
was used for a similar purpose prior to PHP 7.1, but it has limitations compared to modern array destructuring.- Despite making the code more concise, improper use of array destructuring can lead to code that is harder to read and understand. Balance is key.