首页 > 解决方案 > 将两个由相同 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] => 
        )

)

标签: phparraysmerge

解决方案


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

$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()删除其中一个,就像在这个例子中一样。


推荐阅读