PHP数组\合并\递归foreach循环

PHP数组\合并\递归foreach循环,php,arrays,foreach,Php,Arrays,Foreach,如何将数组循环合并到单个数组(可能是对象)中,并将每个值添加到其关联的公共键中 Categories: Array ( [category] => introduction [timeZone] => Europe/Stockholm [language] => Danish ) Array ( [category] => introduction [timeZone] => Europe/Stockholm [language] => Danish )

如何将数组循环合并到单个数组(可能是对象)中,并将每个值添加到其关联的公共键中

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 )
进入

迄今为止:

foreach ($categories as $category){
   $collection = array_merge_recursive($category);
}
如果在PHP中指定$array1、$array2,那么array\u merge\u recursive似乎可以实现我的结果。但我需要从foreach循环开始


谢谢

我认为这个棘手的解决方案:

$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)
    );
}

当然,这在php5.5之后就可以工作了,因为在这个版本中,我们有
数组_列

给定名为
$categories
的初始数组,请考虑:

$collection = array_merge_recursive(...$categories);
foreach($collection as &$item) $item = array_unique($item);
输出:

[
  'category' => ['intro','learning'],
  'timezone' => ['Europe'],
  'language' => ['Danish','German'],
]

谢谢!这正是我想要的。但问题是,为什么“foreach($collection as&$item)$item=array_unique($item);”因为这也适用于“数组_unique($collection)”。只需支付利息,因为两者的回报相同result@Elliott我对
$collection
的每个成员调用
array\u unique()。否则,如果合并的数组在其
类别
子数组中都有一个
intro
值,则可能最终得到
'category'=>['intro','intro']
[
  'category' => ['intro','learning'],
  'timezone' => ['Europe'],
  'language' => ['Danish','German'],
]