I have two arrays. One is taxonomies
:
JavaScript
x
Array
(
[genres] => Array
(
[label] => Genres
[value] => genres
)
[movie_tags] => Array
(
[label] => Movie Tags
[value] => movie_tags
)
[portfolio_category] => Array
(
[label] => Portfolio Categories
[value] => portfolio_category
)
)
and postTypes
:
JavaScript
Array
(
[movies] => Array
(
[0] => genres
[1] => movie_tags
)
[portfolio] => Array
(
[0] => portfolio_category
)
)
Is it possible to combine the two arrays to get something like this?
JavaScript
Array
(
[movies] => Array
(
[0] => Array ( [label] => Genres [value] => genres )
[1] => Array ( [label] => Movie Tags [value] => movie_tags )
)
[portfolio] => Array
(
[0] => Array ( [label] => Portfolio Categories [value] => portfolio_category )
)
)
I’m trying to add the label
and value
from taxonomies
array into postTypes
array but I’m not sure how to match the keys and combine the arrays. Is this possible with a foreach loop?
Advertisement
Answer
Using array_intersect_key()
will prevent any warnings from missing elements in your lookup array.
Code: (Demo)
JavaScript
$result = [];
foreach ($postTypes as $group => $taxKeys) {
$result[$group] = array_values(
array_intersect_key(
$taxonomies,
array_flip($taxKeys)
)
);
}
var_export($result);
Or if there is no risk of missing elements, a classic nesting of loops: (Demo)
JavaScript
$result = [];
foreach ($postTypes as $group => $taxKeys) {
foreach ($taxKeys as $taxKey) {
$result[$group][] = $taxonomies[$taxKey];
}
}
var_export($result);
Or from PHP7.4, you can enjoy arrow functions to use custom functions without needing use
: (Demo)
JavaScript
var_export(
array_map(
fn($taxKeys) => array_map(
fn($taxKey) => $taxonomies[$taxKey],
$taxKeys
),
$postTypes
)
);
All of the above deliver the same output from the provided sample data.