array_merge除一个键/值对外都是? PHP

时间:2015-08-28 17:25:26

标签: php array-merge

我想合并两个用户对象(一个是重复的)。问题是,一个用户对象有一些字段而另一个没有,反之亦然。除了array_merge之外,我想id $second_user所有键/值对。反正有没有这样做?

以下是我的代码。当我尝试合并时,array_merge不会像我希望的那样删除。如果我注释掉合并块,它会正确删除重复项而不合并。但是,当我重新评论它时,仍然有重复。

我认为当id是不可变字段时,问题是尝试使用 public function combine($first_user, $second_user) { // Always make sure $first_user is the "original" user that we're going merge. if ($first_user->created_at > $second_user->created_at) { $tmp = $second_user; $second_user = $first_user; $first_user = $tmp; } // Merge their data and save to the first user $updated_user = array_merge(array_filter($second_user->toArray()), array_filter($first_user->toArray())); $first_user->fill($updated_user)->save(); $second_user->delete(); }

{{1}}

2 个答案:

答案 0 :(得分:1)

合并后取消设置ID:

$array = array_merge($arr1, $arr2);
unset($array['id']);

答案 1 :(得分:0)

我不是100%确定我是否理解正确,但如果你想要达到以下目的:

  • 使用 $ first_user var作为" main" var用于存储数据
  • 并保留 $ first_user var数据(包括ID)
  • 并将 $ second_user 的字段添加到 $ first_user ,同时保留现有 $ first_user 数据

如果是这种情况,请使用数组 + 运算符代替array_merge:

$arr1 = array_filter($first_user->toArray());
$arr2 = array_filter($second_user->toArray());
$updated_user = $arr1 + $arr2; // union
  

+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键,将使用左侧数组中的元素,并且将忽略右侧数组中的匹配元素。