dounao1875 2019-01-07 04:03
浏览 75
已采纳

通过匹配相同的外键来组合2个数组

I have 2 table, that is a question_table and answer_table the structure is like this : enter image description here

And I have a JSON array that I got from question_table and answer_table using php like this.

// to get the question
$pertanyaan = "select * from question_table”;
$resultPertanyaan = mysqli_query($con, $pertanyaan);

while($rowQuery= mysqli_fetch_array($resultPertanyaan)){
   $array_question[]= 
array('id'=>$rowQuery['id’],’question’=>$rowQuery['question']);
}

and the result is like this

array_question :
[
    {
        "id": "8",
        “question”: "Shop sign/billboard  "
    },
    {
        "id": "10",
        "question": "Pylon"
    },
    {
        "id": “11”,
        “question”: "Banner”
    },
    {
        "id": "12”,
        "question": “Sport”
    },
   {
        "id": “14”,
        “question”: “Matic "
    },
    {
        "id": "16”,
        "question": “Cub”
    }
]

To get the answer

$jawaban = "select * from answer_table”;
$resultJawaban = mysqli_query($con, $jawaban);

while($rowQuery= mysqli_fetch_array($resultJawaban)){
    $array_answer[]=
array('id'=>$rowQuery['id'],'remark'=>$rowQuery['remark'],'item'=>$rowQuery['item']);
}

and the result like this

array_answer :
[
    {
        "id": "1b9fa84e-0f2f-11e9-b673-005056be36b2",
        “answer”: "3",
        “id_question”: "16"
    },
    {
        "id": "bc82c3fd-0f2e-11e9-b673-005056be36b2",
        "answer": "1",
        "id_question": "11"
    },
    {
        "id": "cc9363f1-0f2e-11e9-b673-005056be36b2",
        "answer": "3",
        "id_question": "12"
    },
    {
        "id": "f1dfa8b5-0f2e-11e9-b673-005056be36b2",
        "answer": "1",
        "id_question": "14"
    }
]

I want to combine array_answer with array_question, which results like this:

array_result :
[
    {
        "id": "8",
        “question”: "Shop sign/billboard  ",
        “asnwer” : null
    },
    {
        "id": "10",
        "question": "Pylon”,
        “asnwer” : null
    },
    {
        "id": “11”,
        “question”: "Banner”,
        “asnwer” : “1”
    },
    {
        "id": "12”,
        "question": “Sport”,
        “answer” : “3”
    },
    {
        "id": “14”,
        “question”: “Matic “,
        “answer” : “1”
    },
    {
        "id": "16”,
        "question": “Cub”,
        “answer” : “3”
    }
]

How do I get array_result like I expected? Please help me, Thank you

  • 写回答

2条回答 默认 最新

  • doufei2662 2019-01-07 04:36
    关注

    You can use array_map to process each of the questions, looking for an answer in $array_answer for each one:

    $questions = json_decode($array_question);
    $answers = json_decode($array_answer, true);
    
    $array_result = array_map(function ($v) use ($answers) {
        $v->answer = ($k = array_search($v->id, array_column($answers, 'id_question'))) !== false ? $answers[$k]['answer'] : null;
        return $v;
    }, $questions);
    print_r(json_encode($array_result, JSON_UNESCAPED_SLASHES));
    

    Output:

    [{"id":"8","question":"Shop sign/billboard ","answer":null},
     {"id":"10","question":"Pylon","answer":null},
     {"id":"11","question":"Banner","answer":"1"},
     {"id":"12","question":"Sport","answer":"3"},
     {"id":"14","question":"Matic ","answer":"1"},
     {"id":"16","question":"Cub","answer":"3"}
    ]
    

    Demo on 3v4l.org

    Update

    For versions of PHP prior to 5.4, there are a couple of issues with the above code. Firstly array_column was not implemented in PHP until version 5.5.0. Secondly the JSON_UNESCAPED_SLASHES constant and associated functionality wasn't implemented until PHP 5.4.0. We can emulate those with this code:

    function my_array_column($array, $column) {
        return array_map(function ($v) use ($column) { return $v[$column]; }, $array);
    }
    
    $array_result = array_map(function ($v) use ($answers) {
        $v->answer = ($k = array_search($v->id, my_array_column($answers, 'id_question'))) !== false ? $answers[$k]['answer'] : null;
        return $v;
    }, $questions);
    echo str_replace('\/', '/', json_encode($array_result));
    

    Demo on 3v4l.org

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分