问题描述
我在这里有两个数组:
<?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
)
)
,
是的,可以。这只是另一个示例:
<?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);
?>