简体   繁体   English

PHP中关联数组的串联

[英]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将使您获得想要的结果。

Live example: 3v4l 直播示例: 3v4l

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_maparray_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);

See a Php demo 观看PHP演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM