当前位置: 首页 > 知识库问答 >
问题:

将两个数组合并在一起,使用相同的id标记

雍飞雨
2023-03-14

我有一个问题把两个数组组合在一起。一个数组是问题,另一个数组是答案。

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] => 
        )

)

共有2个答案

耿弘阔
2023-03-14

一种使用简单的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

裴宏壮
2023-03-14

您可以开始为问题创建一个索引数组来查找它们。然后,您可以循环访问答案,并将问题数据添加到当前答案中:

$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];
    }
}

参见示例

注意,QuestionIdQuestionId不同,因此您将在组合数组中获得这两个键。您可以使用unset()删除其中一个,如本例所示。

 类似资料:
  • 我有以下两个功能: 如果我没有搞错,应该可以将和合并到一个函数中,并使用委托参数解析和部分。 那有可能吗?我在试着这么做的时候被卡住了。在伪代码中,我想的是这样的东西:

  • 问题内容: 有没有一种快速的方法来将一个数组的值组合为另一个数组的键? 输入: 预期产量: 我该怎么办? 问题答案: 会完全按照您的意愿做。 引用手册: 通过将keys数组中的值用作键,并将values数组中的值用作对应值来创建数组。 对于您的情况,您必须执行以下操作: 当然,您也可以使用各种循环组合来做到这一点,这可能是最简单的解决方案。

  • 问题内容: 我有两个数组 我需要将此合并到以编程方式匹配用户ID的单个数组 最终的数组应该像 有没有一种更清洁的方法来执行此操作,我的应用程序中有下划线库,但是我找不到一种干净的方法来实现此目的 问题答案: 使用下划线的解决方案: _.map 跨成员 使用 _.findWhere 查找匹配的成员信息 **** _。省略 匹配成员信息中的ID密钥 _。 使用会员信息 扩展 会员

  • 问题内容: 我正在尝试将以下两个数组合并为一个共享相同密钥的数组: 第一个数组: 第二个数组: 如您所见,它们共享相同的密钥(Camera1,Camera2,Camera3等。) 这是我尝试过的: 问题答案: 理想情况下,我希望以一种方式格式化两个数组,从而简单地合并两个数组而不必大惊小怪。 但是我确实提出了一个使用过的解决方案。 输出为:

  • 问题内容: 在一个软件中,我将两个数组与函数合并。但是我需要将相同的数组(当然,具有相同的键)添加到现有数组中。 问题: 如您所见,错过了。 那么,如何将 所有这些 具有相同的键合并? 问题答案: 您需要使用而不是。当然,数组中只能有一个等于的键,但是关联的值将是包含和的数组。

  • 问题内容: 我有两个像 我希望它们合并成单个数组 问题答案: 您需要该方法。