我有一个问题把两个数组组合在一起。一个数组是问题,另一个数组是答案。
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] =>
)
)
一种使用简单的foreach()
循环和array_search()
的方法。在这里,数组搜索将在存在questionId的$Answers
数组上找到,然后将问题和类型放入主$Questions
数组。
注意:我在答案数组中看到带有大写I的questionId
foreach($questions as $key=>$value){
$k = array_search($value['questionid'], array_column($answers, 'questionId'));
if(!empty($key)){
$questions[$key]['question'] = $answers[$k]['question'];
$questions[$key]['type'] = $answers[$k]['type'];
}
}
print_r($questions);
工作演示:https://3v4L.org/szrjs
您可以开始为问题创建一个索引数组来查找它们。然后,您可以循环访问答案,并将问题数据添加到当前答案中:
$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
数组,可以使用&
通过引用更新$Answers
。
foreach ($answers as &$answer) {
$id = $answer['questionid'];
if (isset($indexedQuestions[$id])) {
$answer += $indexedQuestions[$id];
}
}
参见示例
注意,QuestionId
与QuestionId
不同,因此您将在组合数组中获得这两个键。您可以使用unset()
删除其中一个,如本例所示。
我有以下两个功能: 如果我没有搞错,应该可以将和合并到一个函数中,并使用委托参数解析和部分。 那有可能吗?我在试着这么做的时候被卡住了。在伪代码中,我想的是这样的东西:
问题内容: 有没有一种快速的方法来将一个数组的值组合为另一个数组的键? 输入: 预期产量: 我该怎么办? 问题答案: 会完全按照您的意愿做。 引用手册: 通过将keys数组中的值用作键,并将values数组中的值用作对应值来创建数组。 对于您的情况,您必须执行以下操作: 当然,您也可以使用各种循环组合来做到这一点,这可能是最简单的解决方案。
问题内容: 我有两个数组 我需要将此合并到以编程方式匹配用户ID的单个数组 最终的数组应该像 有没有一种更清洁的方法来执行此操作,我的应用程序中有下划线库,但是我找不到一种干净的方法来实现此目的 问题答案: 使用下划线的解决方案: _.map 跨成员 使用 _.findWhere 查找匹配的成员信息 **** _。省略 匹配成员信息中的ID密钥 _。 使用会员信息 扩展 会员
问题内容: 我正在尝试将以下两个数组合并为一个共享相同密钥的数组: 第一个数组: 第二个数组: 如您所见,它们共享相同的密钥(Camera1,Camera2,Camera3等。) 这是我尝试过的: 问题答案: 理想情况下,我希望以一种方式格式化两个数组,从而简单地合并两个数组而不必大惊小怪。 但是我确实提出了一个使用过的解决方案。 输出为:
问题内容: 在一个软件中,我将两个数组与函数合并。但是我需要将相同的数组(当然,具有相同的键)添加到现有数组中。 问题: 如您所见,错过了。 那么,如何将 所有这些 具有相同的键合并? 问题答案: 您需要使用而不是。当然,数组中只能有一个等于的键,但是关联的值将是包含和的数组。
问题内容: 我有两个像 我希望它们合并成单个数组 问题答案: 您需要该方法。