微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PHP连接基于键的两个关联数组

如何解决使用PHP连接基于键的两个关联数组

在这里有两个数组:

<?PHP
    $array1 = array(
        array('id' => 1,'name' => 'John Doe','age' => 20),array('id' => 2,'name' => 'Mae Doe','age' => 17),array('id' => 3,'name' => 'Mark Smith','age' => 35),array('id' => 4,'name' => 'Selena Smith','age' => 15),array('id' => 5,'name' => 'Shane Doe','age' => 26),array('id' => 6,'name' => 'Will Smith','age' => 45)
    )
    
    $array2 = array(
        array('id' => 1,'address' => 'Singapore'),'address' => 'Japan'),'address' => 'Korea')
    )
?>

我想加入他们,在MysqL中是左加入,所以结果将是这样

$result = array(
    array('id' => 1,'age' => 20,'age' => 15,'age' => 26,'address' => 'Korea'),'age' => 45)
)

该地址将根据ID合并到$ array1。

使用PHP可以吗?请帮忙。谢谢。

解决方法

尝试一下:

foreach ($array1 as $key => $arr1) {
   foreach ($array2 as $arr2) {
      if ($arr1['id'] === $arr2['id']) {
          $array1[$key] += array('address' => $arr2['address']);
      }
   }
}

我创建了两个循环,因此您可以遍历两个数组。这样,您可以比较两个id,如果它们匹配,则将地址添加到数组中!

,

您可以使用array_column通过$array2值重新索引id来简化此问题;那么这只是检查id$array1值是否存在数据的问题:

$array1 = array(
    array('id' => 1,'name' => 'John Doe','age' => 20),array('id' => 2,'name' => 'Mae Doe','age' => 17),array('id' => 3,'name' => 'Mark Smith','age' => 35),array('id' => 4,'name' => 'Selena Smith','age' => 15),array('id' => 5,'name' => 'Shane Doe','age' => 26),array('id' => 6,'name' => 'Will Smith','age' => 45)
);
    
$array2 = array(
    array('id' => 1,'address' => 'Singapore','phone_number' => '123','store_name' => 'ABC'),'address' => 'Japan','phone_number' => '456','store_name' => 'DEF'),'address' => 'Korea','phone_number' => '789','store_name' => 'GHI')
);

$addresses = array_column($array2,null,'id');
foreach ($array1 as &$arr) {
    if (isset($addresses[$arr['id']])) $arr = array_merge($arr,$addresses[$arr['id']]);
}
print_r($array1);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John Doe
            [age] => 20
            [address] => Singapore
            [phone_number] => 123
            [store_name] => ABC
        )
    [1] => Array
        (
            [id] => 2
            [name] => Mae Doe
            [age] => 17
        )
    [2] => Array
        (
            [id] => 3
            [name] => Mark Smith
            [age] => 35
        )
    [3] => Array
        (
            [id] => 4
            [name] => Selena Smith
            [age] => 15
            [address] => Japan
            [phone_number] => 456
            [store_name] => DEF
        )
    [4] => Array
        (
            [id] => 5
            [name] => Shane Doe
            [age] => 26
            [address] => Korea
            [phone_number] => 789
            [store_name] => GHI
        )
    [5] => Array
        (
            [id] => 6
            [name] => Will Smith
            [age] => 45
        )
)

Demo on 3v4l.org

,

是的,可以。这只是另一个示例:

<?php
    $array1 = array(
        array('id' => 1,'age' => 45)
    );
    
    $array2 = array(
        array('id' => 1,'address' => 'Singapore'),'address' => 'Japan'),'address' => 'Korea')
    );
    
    // The address will be merged to $array1 based on the id.
    array_walk($array1,function(&$item) use ($array2) {
        array_walk($array2,function($arr2) use (&$item) {
            if($item['id'] == $arr2['id']) {
                $item['address'] = $arr2['address'];
            }
        });
    });
    
    print_r($array1);
?>

Demo here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。