How to create an array of specific values from another multidimensional array
Let’s imagine that we have an array:
$arrays = [
[
'name' => 'John',
'target_id' => 998
],
[
'name' => 'Kim',
'target_id' => 1002
],
[
'name' => 'Bob',
'target_id' => 256
],
];
And as a result, we are going to have this array (only target_id values from the array):
$newArray = [998, 1002, 256];
The typical way is to create a loop, go through each array, and save the specific values:
$newArray = [];
foreach ($arrays as $itemArray) {
if (isset($itemArray['target_id'])) {
$newArray[] = $itemArray['target_id'];
}
}
Output:
print_r($newArray);
/**
Array
(
[0] => 998
[1] => 1002
[2] => 256
)
*/
But also, we have the simplest way to do it using native array_column()
function.
Example:
$arrays = [
[
'name' => 'John',
'target_id' => 998
],
[
'name' => 'Kim',
'target_id' => 1002
],
[
'name' => 'Bob',
'target_id' => 256
],
];
$newArray = array_column($arrays, 'target_id');
Output:
print_r($newArray);
/*
Array
(
[0] => 998
[1] => 1002
[2] => 256
)
*/
Using:
array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array
If we want to create an indexed array by a specific key, we should pass an optional parameter index_key
.
Example:
$arrays = [
[
'name' => 'John',
'target_id' => 998
],
[
'name' => 'Kim',
'target_id' => 1002
],
[
'name' => 'Bob',
'target_id' => 256
],
];
$newArray = array_column($arrays, 'name','target_id');
Output:
print_r($newArray);
/*
Array
(
[998] => 'John'
[1002] => 'Kim'
[256] => 'Bob'
)
*/