[英]concatenation of associative arrays in php
I'm trying to achieve proper merging of two associative arrays: 我正在尝试实现两个关联数组的正确合并:
$year = array(
array('name' => '2020'),
array('name' => '2019'),
array('name' => '2018'),
array('name' => '2017')
);
$meeting = array(
array(
'name' => 'meeting1',
'year' => '2020'
),
array(
'name' => 'meeting2',
'year' => '2020'
),
array(
'name' => 'meeting3',
'year' => '2019'
),
array(
'name' => 'meeting4',
'year' => '2018'
),
array(
'name' => 'meeting5',
'year' => '2018'
)
);
The result i desire would look like this: 我想要的结果看起来像这样:
var_dump($array)
$array = array(
array(
'2020' => array(
array('name' => 'meeting1'),
array('name' => 'meeting2')
)
),
array(
'2019' => array(
array('name' => 'meeting3')
)
),
array(
'2018' => array(
array('name' => 'meeting4'),
array('name' => 'meeting5')
)
),
array(
'2017' => array()
)
)
However both "+" operator and array_merge() used on $meeting and $year are producing different results than what I require. 但是,在$ meeting和$ year上使用的“ +”运算符和array_merge()产生的结果与我所需的结果不同。 Is it possible to do using + operator or array_merge or am I required to use foreach loops ?
是否可以使用+运算符或array_merge进行操作,还是需要使用foreach循环?
There is no PHP native function for group array but as said, simple for loop should do it: 没有用于组数组的PHP本机函数,但是如上所述,简单的for循环应该做到这一点:
foreach($meeting as $e) {
$array[$e['year']][] = array('name' => $e['name']);
}
And $array
will you have you desire result. $array
将使您获得想要的结果。
Edit 编辑
If you want all the years from $year
just init before as: 如果您希望从
$year
所有$year
只是在初始化为:
foreach($year as $e)
$array[$e['name']] = [];
And then use the first for loop 然后使用第一个for循环
So full solution will be: 因此完整的解决方案将是:
foreach($year as $e)
$array[$e['name']] = [];
foreach($meeting as $e)
$array[$e['year']][] = array('name' => $e['name']);
You might also use a combination of array_map and array_filter . 您也可以结合使用array_map和array_filter 。 For every year in the
$year
array you can find the matches in the $meeting
array. 对于
$year
数组中的每一年,您都可以在$meeting
数组中找到匹配项。
$array = array_map(function($y) use ($meeting){
return [$y["name"] => array_filter($meeting, function($m) use ($y) {
return $m['year'] == $y['name'];
})];
}, $year);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.