php - 将两个由相同 id 标记的数组合并在一起
问题描述
我有一个问题将两个数组组合在一起。一个数组我有问题,另一个是答案。
array_merge()
不起作用,因为我丢失了一些键+值。也不array_intersect_key()
是我想要的,希望有人能帮帮我。
两个数组都有键[questionid]
,这是我要定位的键。
数组 1(答案);
Array
(
[0] => Array
(
[questionid] => 28f68dc4-acc6-4ab7-956d-ca41abf3a4c2
[answer] => Antwoord 89
[extra] =>
)
[1] => Array
(
[questionid] => 28f-28f68dc4-acc6-4ab7-956d-ca41abf3a4c20
[answer] => Antwoord 20
[extra] => Extra informatie 20
)
[2] => Array
(
[questionid] => d8f-28f68dc4-acc6-4ab7-956d-ca41abf3a4c20
[answer] => Antwoord 3
[extra] =>
)
)
还有一个带有问题的数组:
(
[0] => Array
(
[questionId] => 28f-28f68dc4-acc6-4ab7-956d-ca41abf3a4c20
[question] => 1. Question 1
[type] => typequestion/question-text-input
)
)
最终数组的外观必须是:
Array
(
[0] => Array
(
[questionid] => 28f68dc4-acc6-4ab7-956d-ca41abf3a4c2
[answer] => Antwoord 89
[extra] =>
)
[1] => Array
(
[questionid] => 28f-28f68dc4-acc6-4ab7-956d-ca41abf3a4c20
[answer] => Antwoord 20
[extra] => Extra informatie 20
[question] => 1. Question 1
[type] => typequestion/question-text-input
)
[2] => Array
(
[questionid] => d8f-28f68dc4-acc6-4ab7-956d-ca41abf3a4c20
[answer] => Antwoord 3
[extra] =>
)
)
解决方案
您可以开始为问题创建一个索引数组以找到它们。然后,您可以遍历答案并将问题数据添加到当前答案:
$indexedQuestions = [];
foreach ($questions as $question) {
$id = $question['questionId'];
$indexedQuestions[$id] = $question;
}
$combined = [];
foreach ($answers as $answer) {
$id = $answer['questionid'];
if (isset($indexedQuestions[$id])) {
$combined[] = $answer + $indexedQuestions[$id];
} else {
$combined[] = $answer;
}
}
查看示例
如果要更新$answers
数组,可以使用引用&
更新。$answer
foreach ($answers as &$answer) {
$id = $answer['questionid'];
if (isset($indexedQuestions[$id])) {
$answer += $indexedQuestions[$id];
}
}
查看示例
请注意,这questionid
与 不同questionId
,因此您将在组合数组中获得两个键。您可以使用unset()
删除其中一个,就像在这个例子中一样。
推荐阅读
- ios - 如何在 SwiftUI 中更改 UIImagePickerController 的“取消”按钮的颜色
- r - R中分组数据和数据框之间的数学运算
- python - Python - 用于在表达式中捕获异常的简短语法
- android - 如何解决 Flutter 应用构建失败(任务 ':app:mergeDebugResources' 的执行失败。)?
- postgresql - NestJS 在用户博客文章中插入评论
- python - 检索以scrapy开头的href
- android - 房间数据库的类型转换器不适用于具有来自另一个类的对象的类
- python - 如何检查是否有多个环境变量集用于在 PATH 中运行 Python 脚本
- swift - CoreData - 如果存在不保存,如果不存在则保存
- python - 如何在pygame中将事件限制为每帧一个事件(迭代)