PHP。使用一的属性映射两个数组与第二个数组的键

PHP。使用一的属性映射两个数组与第二个数组的键,php,arrays,mapping,Php,Arrays,Mapping,我有两个阵列: 第一个是这样的: Array: 8 [▼ 0 => array:17 [▼ "id" => 4 "firstname" => "Maria" "lastname" => "von Moszczenski" "slug" => "marianne-von-moszczenski" "email" => "marianne.von.moszczensk

我有两个阵列:

第一个是这样的:

   Array: 8 [▼
      0 => array:17 [▼
        "id" => 4
        "firstname" => "Maria"
        "lastname" => "von Moszczenski"
        "slug" => "marianne-von-moszczenski"
        "email" => "marianne.von.moszczenski@gmail.com"
        "email_verified_at" => null
        "created_at" => "2019-11-21 17:34:53"
        "updated_at" => "2019-11-21 17:34:53"
        "deleted_at" => null
      ]
        1 => User {...}
        2 => User {...}
        3 => User {...}
        ... unknown number of elements
     ]
array:8 [▼
  "Maria" => 17
  "Stefanie" => 2
  "Angela" => 3
  "Andrea" => 4
  "Michelle" => 5
  "Yvonne" => 6
  "Martina" => 7
  "Karolina" => 8
  ... unknown number of elements...
]
第二个数组如下所示:

   Array: 8 [▼
      0 => array:17 [▼
        "id" => 4
        "firstname" => "Maria"
        "lastname" => "von Moszczenski"
        "slug" => "marianne-von-moszczenski"
        "email" => "marianne.von.moszczenski@gmail.com"
        "email_verified_at" => null
        "created_at" => "2019-11-21 17:34:53"
        "updated_at" => "2019-11-21 17:34:53"
        "deleted_at" => null
      ]
        1 => User {...}
        2 => User {...}
        3 => User {...}
        ... unknown number of elements
     ]
array:8 [▼
  "Maria" => 17
  "Stefanie" => 2
  "Angela" => 3
  "Andrea" => 4
  "Michelle" => 5
  "Yvonne" => 6
  "Martina" => 7
  "Karolina" => 8
  ... unknown number of elements...
]
我想将两者合并,因此得到以下结构:

Array: 8 [▼
  0 => array:17 [▼
    "id" => 4
    "firstname" => "Maria"
    "lastname" => "von Moszczenski"
    "slug" => "marianne-von-moszczenski"
    "email" => "marianne.von.moszczenski@gmail.com"
    "email_verified_at" => null
    "created_at" => "2019-11-21 17:34:53"
    "updated_at" => "2019-11-21 17:34:53"
    "deleted_at" => null
    "total" => 17  // <------ this is the new field
    ... unknown number of elements...
  ]
    1 => User {...}
    2 => User {...}
    3 => User {...}
 ]

如果我在中间回响前缀的结果,我看到添加了新字段,但是当两个结尾结束时,没有添加新字段。

我的问题是:

这种方法看起来容易出错,或者如果阵列太大,可能会导致性能问题

这两个数组映射第一个属性(firstname)和第二个属性(firstname)的键,还有其他方法映射/合并/相交吗


如果没有任何“神奇”的方法,我必须做两个循环。我做错了什么?

您可以循环,您已经有了由用户名索引的totals数组,所以只需循环用户数组,如果有值,则将其添加到

foreach ($users as &$user) {
    if (isset($totalsPerEmployee[$user['firstname']])) {
        $user['totalappointments'] = $totalsPerEmployee[$user['firstname']];
    }
}
unset($user);

另外,为了确保更新原始数组,请使用
和$user
使用对数据的引用,否则(如您所发现的)将更新数据的副本。只是为了确保-在循环后使用
unset($user)
,以防万一。

您可以循环,您已经有了由用户名索引的totals数组,因此只需循环用户数组,如果有值,则将其添加到

foreach ($users as &$user) {
    if (isset($totalsPerEmployee[$user['firstname']])) {
        $user['totalappointments'] = $totalsPerEmployee[$user['firstname']];
    }
}
unset($user);

另外,为了确保更新原始数组,请使用
和$user
使用对数据的引用,否则(如您所发现的)将更新数据的副本。只是为了确保-在循环之后使用
unset($user)
,以防万一。

谢谢您的回答。它是有效的,你能解释一下foreach中的“&”吗?->foreach($users as&$user)。我把它拿走了,它不起作用。我添加了更多的解释-它被称为引用,它允许你修改原始对象而不是副本。还有一个问题,数组的最后一个元素如下所示:7=>&数组:18。有没有办法去掉那个“&”符号?谢谢你的回答。它是有效的,你能解释一下foreach中的“&”吗?->foreach($users as&$user)。我把它拿走了,它不起作用。我添加了更多的解释-它被称为引用,它允许你修改原始对象而不是副本。还有一个问题,数组的最后一个元素如下所示:7=>&数组:18。有没有办法去掉那个“&”符号?