0

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.

2 Answers 2

1

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'],
]

Live demo

Sign up to request clarification or add additional context in comments.

2 Comments

thanks! This is exactly what I was after. Question though, why the 'foreach($collection as &$item) $item = array_unique($item);' as this also works 'array_unique($collection)'. Just out interest as both return same result
@Elliott I call array_unique() on each member of $collection because you want each sub-array to have unique values. Otherwise you might end up with 'category'=>['intro','intro'] if the arrays you merged both had an intro value in their category sub-arrays.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.