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。有没有办法去掉那个“&”符号?