我想合并两个用户对象(一个是重复的)。问题是,一个用户对象有一些字段而另一个没有,反之亦然。除了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}}
答案 0 :(得分:1)
合并后取消设置ID:
$array = array_merge($arr1, $arr2);
unset($array['id']);
答案 1 :(得分:0)
我不是100%确定我是否理解正确,但如果你想要达到以下目的:
如果是这种情况,请使用数组 + 运算符代替array_merge:
$arr1 = array_filter($first_user->toArray());
$arr2 = array_filter($second_user->toArray());
$updated_user = $arr1 + $arr2; // union
+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键,将使用左侧数组中的元素,并且将忽略右侧数组中的匹配元素。