2017-08-12 70 views
0

如何将数组的循环合并到单个数组(可能是对象)中将每个值添加到其关联的公用密钥?PHP array_merge_recursive与foreach循环

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) 

Collection 

Array ( 
     [category] => Array (e-learning,introduction) 
     [timeZone] => Europe/Stockholm 
     [language] => Array (Danish,German) 
) 

mycode的迄今:

foreach ($categories as $category){ 
    $collection = array_merge_recursive($category); 
} 

它看起来像array_merge_recursive会实现我的结果,如果我有$阵列1,在PHP中sepcified $数组2。但我需要从foreach循环中完成。

谢谢。

回答

1

给定一个名为$categories初始阵列,可以考虑:

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

输出:

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

Live demo

+0

的感谢!这正是我所追求的。问题是,为什么'foreach($ collection as&$ item)$ item = array_unique($ item);'因为这也适用'array_unique($ collection)'。只是出于兴趣,因为两者都返回相同的结果 – Elliott

+0

@Elliott我在'$ collection'的每个成员上调用'array_unique()',因为你希望每个子数组都有唯一的值。否则,如果你合并的数组在'category'子数组中有一个'intro'值,那么你可能会用'category'=> ['intro','intro']'结束。 – BeetleJuice

0

我想这棘手的解决方案:当然

$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,在这个版本中,我们有array_column