How do you merge a loop of arrays into a single array(maybe object) adding each value to its associated common key?
Categories:
Array ( [category] => introduction [timeZone] => Europe/Stockholm [language] => Danish )
Array ( [category] => introduction [timeZone] => Europe/Stockholm [language] => Danish )
Array ( [category] => e-learning [timeZone] => Europe/Stockholm [language] => German )
into
Collection
Array (
[category] => Array (e-learning,introduction)
[timeZone] => Europe/Stockholm
[language] => Array (Danish,German)
)
Mycode so far:
foreach ($categories as $category){
$collection = array_merge_recursive($category);
}
It seem like array_merge_recursive would achieve my result if I had $array1,$array2 sepcified within the PHP. But I need to do from a foreach loop.
Thanks.
Given the initial array named $categories
, Consider:
$collection = array_merge_recursive(...$categories);
foreach($collection as &$item) $item = array_unique($item);
Output:
[
'category' => ['intro','learning'],
'timezone' => ['Europe'],
'language' => ['Danish','German'],
]
I suppose this tricky solution:
$collection = [];
// get keys of a first element of categories
$keys = array_keys($categories[0]);
// iterate over these keys
foreach ($keys as $key) {
// use `array_unique` to eliminate duplicates
$collection[] = array_unique(
// `array_column` will give you all values under `$key`
array_column($categories, $key)
);
}
Of course this works since php5.5, as in this version we have array_column
.