Array_merge除一个键/值对外的所有键/值对?PHP


array_merge all except for one key/value pair? PHP

我想合并两个用户对象(一个是重复的)。问题是,一个用户对象有一些字段,另一个没有,反之亦然。我想要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

+操作符返回左数组后面的右数组;对于同时存在于两个数组中的键,将使用左边数组中的元素,而忽略右边数组中的匹配元素。