在PHP中,我有这两个数组,第一个是“ $ ar1”,第二个是“ $ ar2”:
Array
(
[0] => stdClass Object
(
[id] => 1505
[category] => blue
)
[1] => stdClass Object
(
[id] => 1805
[category] => red
)
)
Array
(
[1777] => stdClass Object
(
[id] => 1505
[category] => yellow
)
[1877] => stdClass Object
(
[id] => 1507
[category] => blue
)
)
我想将$ ar1添加到$ ar2,但前提是“ id”尚未在$ ar2中。 例如:ID为“ 1505”的ID不应添加到$ ar2。 这是我使用的代码:
$ ar3 = array_merge_recursive($ ar1,$ ar2);
答案 0 :(得分:2)
可能不是最类似于php的代码(我想有一些数组函数可以做得更好),但是它可以正常工作:
$array1 = array(
new Dummy(1505,"blue"),
new Dummy(1805,"red")
);
$array2 = array(
new Dummy(1505,"yellow"),
new Dummy(1507,"blue")
);
$array3 = [];
foreach($array1 as $value)
{
$array3[$value->id] = $value;
}
foreach($array2 as $value)
{
if(!isset($array3[$value->id]))
{
$array3[$value->id] = $value;
}
}
var_dump($array3);
我刚上过一个Dummy类,因为我想尽可能地接近您的数据。这使用映射的键(数组是PHP中的映射)作为主键。首先,您遍历始终设置的数组,然后遍历只有在尚未设置ID的情况下才应用到最终数组的数组->完成。打印:
array(3) {
[1505]=> object(Dummy)#1 (2) { ["id"]=> int(1505) ["category"]=> string(4) "blue"}
[1805]=> object(Dummy)#2 (2) { ["id"]=> int(1805) ["category"]=> string(3) "red" }
[1507]=> object(Dummy)#4 (2) { ["id"]=> int(1507) ["category"]=> string(4) "blue" }
}
答案 1 :(得分:2)
一种可能性是,首先使用array_column从$ar2
中提取ID,然后使用array_filter:
$ar2 = array( '1777' => (object) array('id' => '1505', 'category' => 'yellow'), '1877' => (object) array('id' => '1507', 'category' => 'blue'), );
$ids = array_column($ar1, 'id');
$ar3 = array_merge_recursive($ar1, array_filter($ar2, function($x) use ($ids) {
return !in_array($x->id, $ids);
}));
print_r($ar3);
结果:
Array
(
[0] => stdClass Object
(
[id] => 1505
[category] => blue
)
[1] => stdClass Object
(
[id] => 1805
[category] => red
)
[2] => stdClass Object
(
[id] => 1507
[category] => blue
)
)
答案 2 :(得分:0)
尝试合并数组
array_merge($array1,$array2)
答案 3 :(得分:0)
尝试一下,功能来自此链接:http://php.net/manual/en/function.array-unique.php
$array1 = array(
array('id'=>'1505', 'category'=>'blue'),
array('id'=>'1805', 'category'=>'red')
);
$array2 = array(
array('id'=>'1505', 'category'=>'yellow'),
array('id'=>'1507', 'category'=>'blue')
);
$array3 = array_merge($array1, $array2);
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
if (!in_array($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
}
$i++;
}
return $temp_array;
}
$details = unique_multidim_array($array3,'id');
echo "<pre>";
print_r($details);
die;