首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -合并两个值匹配的关联数组

PHP -合并两个值匹配的关联数组
EN

Stack Overflow用户
提问于 2018-05-17 06:25:51
回答 3查看 1.8K关注 0票数 4

我有两个需要合并的数组。我可以循环遍历每个数组并手动合并。但是,是否有内置的功能来做到这一点呢?

数组1:

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [detail_image_id] => 6389
        [product_name] => Starter broadband Package
    )

[1] => Array
    (
        [detail_image_id] => 6358
        [product_name] => Starter broadband Package
    )
)

数组2:

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [detail_image_id] => 6358
        [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
    )

[1] => Array
    (
        [detail_image_id] => 6389
        [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
    )
)

预期输出数组是:

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [detail_image_id] => 6389
        [product_name] => Starter broadband Package
        [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
    )

[1] => Array
    (
        [detail_image_id] => 6358
        [product_name] => Starter broadband Package
        [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
    )
)

我只从数组中添加了一个样本。阵列很大。对于循环和迭代器,我们是否可以使用像array_merge()array_map()这样的PHP函数而不是手动操作呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-17 09:51:15

更老更聪明:我从几年前就把我的答案擦掉了,因为我不再推荐这些技巧了。将数组合并到一个foreach()循环中,然后在相关行中“联合”(+作为数组联合操作符)数据,这将是最简洁和最有效的。

空合并运算符(??)用于确保总是有“联合”的东西。

代码:(演示)

代码语言:javascript
复制
$result = [];
foreach (array_merge($array1, $array2) as $row) {
    $result[$row['detail_image_id']] = ($result[$row['detail_image_id']] ?? []) + $row;
}

var_export(array_values($result));

输出:

代码语言:javascript
复制
array (
  0 => 
  array (
    'detail_image_id' => '6389',
    'product_name' => 'Starter broadband Package',
    'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg',
  ),
  1 => 
  array (
    'detail_image_id' => '6358',
    'product_name' => 'Starter broadband Package',
    'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg',
  ),
)
票数 4
EN

Stack Overflow用户

发布于 2018-05-17 06:40:49

你可以这样做:

代码语言:javascript
复制
$arr1 = array(); //Your array 1
$arr2 = array(); //Your array 2

//Make a temp array to that use detail_image_id as the key
$arr1Temp = array_combine( array_column($arr1,'detail_image_id'), $arr1 );
$arr2Temp = array_combine( array_column($arr2,'detail_image_id'), $arr2 );

//Get All unique detail_image_id from 2 arrays. 
//This is to make sure that all detail_image_id's will be included. 
//detail_image_id on 2nd array might not be present on the 1st one
$imgIds = array_unique(array_merge( array_keys($arr1Temp), array_keys($arr2Temp) ));

//Do a simple foreach loop
$result = array();
foreach( $imgIds as $val ) {
    $result[] = array_merge( $arr1Temp[$val], $arr2Temp[$val] );
}

print_r( $result );

这将导致:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [detail_image_id] => 6389
            [product_name] => Starter broadband Package
            [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
        )

    [1] => Array
        (
            [detail_image_id] => 6358
            [product_name] => Starter broadband Package
            [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
        )

)
票数 3
EN

Stack Overflow用户

发布于 2018-05-17 06:48:26

您可以使用array_column()array_combine()的组合来使用detail_image_id作为键创建引用数组。然后,使用foreach()循环,可以使用运算符合并数组。

代码语言:javascript
复制
$array1 = [
    ['detail_image_id' => '6389', 'product_name' => 'Starter broadband Package'],
    ['detail_image_id' => '6358', 'product_name' => 'Starter broadband Package']
];
$array2 = [
    ['detail_image_id' => '6358', 'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg'],
    ['detail_image_id' => '6389', 'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg']
];

// create associative array with detail_image_id as key,
$out = array_combine(array_column($array1, 'detail_image_id'), $array1);
foreach ($array2 as $item) {
    $key = $item['detail_image_id']; // shortcut for the key,
    $out[$key] = $out[$key] + $item; // merge arrays
}
print_r(array_values($out)); // reset to indexed keys (0,1,2...) 

输出:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [detail_image_id] => 6389
            [product_name] => Starter broadband Package
            [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
        )

    [1] => Array
        (
            [detail_image_id] => 6358
            [product_name] => Starter broadband Package
            [guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
        )

)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50384669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档