带有foreach循环的PHP array_merge_recursive

如何将数组循环合并为单个数组(可能是对象),将每个值添加到其关联的公共密钥中 ?</ p>

 类别:

Array([category] ​​=&gt;简介[timeZone] =&gt;欧洲/斯德哥尔摩[语言] =&gt;丹麦语)

Array ([category] ​​=&gt; introduction [timeZone] =&gt; Europe / Stockholm [语言] =&gt;丹麦语)

Array([category] ​​=&gt; e-learning [timeZone] =&gt; Europe / Stockholm [语言 ] =&gt;德语)
</ code> </ pre>

进入</ p>

  Collection 

Array(
[category] ​​= &gt;数组(电子学习,介绍)
[timeZone] =&gt;欧洲/斯德哥尔摩
[语言] =&gt;数组(丹麦语,德语)

</ code> </ pre>

到目前为止我的代码:</ p>

  foreach($ categories as $ category){
$ collection = array_merge_recursive($ category);
}
</ code> </ pre>

如果我在PHP中使用$ array1,$ array2 sepcified,似乎array_merge_recursive将实现我的结果。 但我需要从foreach循环开始。</ p>

谢谢。 </ p>
</ div>

展开原文

原文

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个回答



给定名为 $ categories </ code>的初始数组,请考虑:</ p>

   $ collection = array_merge_recursive(... $ categories); 
foreach($ collection as&amp; $ item)$ item = array_unique($ item);
</ code> </ pre>

< p>输出:</ p>

  [
'category'=&gt; ['intro','learning'],
'timezone'=&gt; ['Europe'],
'language'=&gt; ['丹麦语','德语'],
]
</ code> </ pre>

现场演示</ strong> </ p>
</ div>

展开原文

原文

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

doujiang2641
doujiang2641 我在$ collection的每个成员上调用array_unique(),因为您希望每个子数组都具有唯一值。 否则,如果合并的数组在其类别子数组中都有一个介绍值,则最终可能会出现'category'=> ['intro','intro']。
大约 3 年之前 回复
douzhuanfen5923
douzhuanfen5923 谢谢! 这正是我追求的。 问题,为什么'foreach($ collection as&$ item)$ item = array_unique($ item);' 因为这也有效'array_unique($ collection)'。 只是出于兴趣,两者都返回相同的结果
大约 3 年之前 回复



我想这个棘手的解决方案:</ p>

  $ collection = []; 
//获取类别的第一个元素的键
$ keys = array_keys($ categories [0]);
//遍历这些键
foreach($ keys as $ key){
//使用array_unique 消除重复项
$ collection [] = array_unique(
//`array_column将​​为您提供$ key
array_column($ categories,$ key)下的所有值
);
}
</ 代码> </ pre>

当然这可以用于php5.5,因为在这个版本中我们有 array_column </ code>。</ p>
</ div>

展开原文

原文

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.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐