I have two arrays. One is taxonomies:
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:
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?
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)
$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)
$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)
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.