我有一个名为问题的表,格式如下:
表名:问题
qn_id | question |
---------------------------------------------------------------
19 | What is your rating on your Team Work?
20 | What is your rating on your Skills?
21 | What is your rating on your Personal Quality?
我还有一个名为 rating 的表,如下所示:
表名: 评分
id | employee_id | question_id | self_score | supervisor_score
-----------------------------------------------------------------
1 | 205 | 19 | 4 | 3
2 | 205 | 20 | 5 | 4
3 | 205 | 21 | 4 | 5
注意:提供分数涉及两个人。一个是 supervisee ,另一个是 supervisor 。
supervisee 提供的分数保留在名为 self_score 的列中。在表中, employee_id 是 supervisee 的 id 。 主管还为问题提供了评分给监督,如表中所示。
>我已经从数据库中生成了数据作为 Array ,如下所示:
$params = Array
(
[selfscore_19] => 4
[supervisorscore_19] => 3
[selfscore_20] => 5
[supervisorscore_20] => 4
[selfscore_21] => 4
[supervisorscore_21] => 5
)
注意:在名为 [selfscore_19] 的键中, selfscore _ 是字符串,而 19 是问题ID。
问题与“ 自我”和“ 主管”都相同。
因此,我在 question_id 后面附加了名为“ selfscore ”和“ supervisorscore ”的字符串。
在下面显示的数组中,键为: [selfscore_19] ,该值已附加 question_id ,即 19 和 值是“ 自我”提供的得分,该得分为 4 。
其他数据也遵循类似的模式。
尝试:
下面的代码显示了到目前为止我所做的尝试:
注意:我只展示了该方法的主要部分。
foreach($params as $key => $value){
$exp_key = explode('_', $key);
if($exp_key[0]=='selfscore'){
$arr_result[] = $value;
}
}
foreach($params as $key => $value){
$exp_key = explode('_', $key);
if($exp_key[0]=='supervisorscore'){
$arr_result[] = $value;
}
}
if(isset($arr_result)){
echo '<pre>';
print_r($arr_result);
echo '<pre>';
}
这是上面代码的输出:
当前输出:
Array
(
[0] => 4
[1] => 5
[2] => 4
[3] => 3
[4] => 4
[5] => 5
)
现在,我想以以下输出的形式转换当前输出。 尽管我已经对此案例进行了研究,但是我发现它有些棘手。 我应该做什么修改才能达到要求的输出? 建议受到高度赞赏。
必需的输出:
$score['self_score']=array(
array('question_id'=>19,'score'=>4)
array('question_id'=>20,'score'=>5)
array('question_id'=>21,'score'=>4)
);
$score['supervisor_score']=array(
array('question_id'=>19,'score'=>3),
array('question_id'=>20,'score'=>4)
array('question_id'=>21,'score'=>5)
);
答案 0 :(得分:0)
单循环执行。将$exp_key
的第一部分用作结果数组的键,并将第二部分用作子数组的question_id
键的值。
foreach ($arr_result as $key => $value) {
$exp_key = explode("_", $key);
$score[$exp_key[0]][] = array("question_id" => $exp_key[1], "score" => $value);
}
答案 1 :(得分:0)
我认为我建议您使用UNION
来连接两个简单查询,以便您的初始结果集非常接近您想要的结果(足够简单地进行迭代和/或修改)。
SQL:(Demo)
(SELECT 'group' AS 'self_score', question_id, self_score
FROM rating
WHERE employee_id = 205
ORDER BY id)
UNION
(SELECT 'supervisor_score', question_id, supervisor_score
FROM rating
WHERE employee_id = 205
ORDER BY id)
结果集:
group | question_id | self_score
------------------|---------------|------------
self_score | 19 | 4
self_score | 20 | 4
self_score | 21 | 5
supervisor_score | 19 | 3
supervisor_score | 20 | 4
supervisor_score | 21 | 5
如果您愿意使用PDO解决方案,fetchAll(PDO::FETCH_GROUP)将非常方便。