php。使用一个的属性与第二个的键映射两个数组
Posted
技术标签:
【中文标题】php。使用一个的属性与第二个的键映射两个数组【英文标题】:PHP. Map two arrays using the attribute of one against the key of the second 【发布时间】:2020-03-20 01:33:19 【问题描述】:我有两个数组:
第一个看起来像这样:
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 ...
]
所以我这样做了:
foreach ($totalsPerEmployee as $key => $total)
foreach ($users as $user)
if ($user['firstname'] === $key)
$user['totalappointments'] = $total; // if I stop and echo hier I see the new field
如果我在中间回显foreach的结果,我看到添加了新字段,但是一旦两个foreach结束,则没有添加新字段。
我的问题是:
这种方法看起来容易出错,或者如果数组变得太大可能会导致性能问题。
是否有任何其他方式来映射/组合/相交或这两个数组将第一个中的一个属性(名字)映射到第二个的键?
如果没有任何“魔术”方法,我必须进行两个循环。我做错了什么?
【问题讨论】:
【参考方案1】:你可以循环循环,你已经有了用户名索引的总计数组,所以只需循环用户数组,如果有值,然后将其添加到...
foreach ($users as &$user)
if (isset($totalsPerEmployee[$user['firstname']]))
$user['totalappointments'] = $totalsPerEmployee[$user['firstname']];
unset($user);
还要确保您更新原始数组,使用&$user
使用对数据的引用,否则您(如您所见)更新数据的副本。只是为了确保 - 在循环之后使用 unset($user)
以防万一。
【讨论】:
感谢您的回答。它有效,你能解释一下foreach中的“&”吗? ->foreach ($users as &$user) 。我把它拿走了它不起作用。 我添加了更多解释 - 它称为引用,它允许您修改原始对象而不是副本。 ***.com/questions/25835856/… 有更多解释。 还有一个问题,数组的最后一个元素是这样的:7 => & array:18。有什么办法可以去掉那个“&”符号?以上是关于php。使用一个的属性与第二个的键映射两个数组的主要内容,如果未能解决你的问题,请参考以下文章