通过匹配相同的外键来组合 2 个数组
Combine 2 arrays by matching the same foreign key
我有2个table,也就是一个question_table和一个answer_table
结构是这样的:
我有一个 JSON 数组,它是从 question_table 和 answer_table 使用 php 得到的。
// 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']);
}
结果是这样的
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”
}
]
求答案
$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']);
}
结果是这样的
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"
}
]
我想合并 array_answer 和 array_question,结果如下:
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”
}
]
如何获得预期的 array_result?请帮助我,谢谢
你能试试下面的代码吗:
$sql = "select q.id, q.question, a.aswer from question_table q inner join answer_table a ON q.id = a.id_question”;
$resultPertanyaan = mysqli_query($con, $sql);
while($rowQuery= mysqli_fetch_array($resultPertanyaan)){
$array_result[]=
array('id'=>$rowQuery['id’],’question’=>$rowQuery['question'], 'answer' => $rowQuery['aswer']);
}
您可以使用 array_map
来处理每个问题,在 $array_answer
中为每个问题寻找答案:
$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));
输出:
[{"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"}
]
更新
对于 5.4 之前的 PHP 版本,上述代码存在一些问题。首先,array_column
直到 5.5.0 版本才在 PHP 中实现。其次,JSON_UNESCAPED_SLASHES
常量和相关功能直到 PHP 5.4.0 才实现。我们可以用这段代码模拟那些:
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));
我有2个table,也就是一个question_table和一个answer_table
结构是这样的:
我有一个 JSON 数组,它是从 question_table 和 answer_table 使用 php 得到的。
// 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']);
}
结果是这样的
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”
}
]
求答案
$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']);
}
结果是这样的
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"
}
]
我想合并 array_answer 和 array_question,结果如下:
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”
}
]
如何获得预期的 array_result?请帮助我,谢谢
你能试试下面的代码吗:
$sql = "select q.id, q.question, a.aswer from question_table q inner join answer_table a ON q.id = a.id_question”;
$resultPertanyaan = mysqli_query($con, $sql);
while($rowQuery= mysqli_fetch_array($resultPertanyaan)){
$array_result[]=
array('id'=>$rowQuery['id’],’question’=>$rowQuery['question'], 'answer' => $rowQuery['aswer']);
}
您可以使用 array_map
来处理每个问题,在 $array_answer
中为每个问题寻找答案:
$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));
输出:
[{"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"}
]
更新
对于 5.4 之前的 PHP 版本,上述代码存在一些问题。首先,array_column
直到 5.5.0 版本才在 PHP 中实现。其次,JSON_UNESCAPED_SLASHES
常量和相关功能直到 PHP 5.4.0 才实现。我们可以用这段代码模拟那些:
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));