我想合并两个用户对象(一个是重复的)。问题是,一个用户对象有一些字段,另一个没有,反之亦然。我想要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();
}
在合并后取消id:
$array = array_merge($arr1, $arr2);
unset($array['id']);
我不是100%确定我是否理解正确,但如果你不想实现以下目标:
- 使用$first_user var作为存储数据的"主要"变量
- 和保存$first_user var数据(包括ID)
- 和添加$second_user字段到$first_user,同时保留现有的$first_user数据
如果是这种情况,只需使用array +操作符:
$arr1 = array_filter($first_user->toArray());
$arr2 = array_filter($second_user->toArray());
$updated_user = $arr1 + $arr2; // union
+操作符返回左数组后面的右数组;对于同时存在于两个数组中的键,将使用左边数组中的元素,而忽略右边数组中的匹配元素。