Php 为数组的键对和值对提供自定义名称
我有一个表格,名为问题,格式如下: 表格名称:问题Php 为数组的键对和值对提供自定义名称,php,arrays,Php,Arrays,我有一个表格,名为问题,格式如下: 表格名称:问题 qn_id | question | --------------------------------------------------------------- 19 | What is your rating on your Team Work? 20 | What is your rating on
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的表,如下所示:
$params = Array
(
[selfscore_19] => 4
[supervisorscore_19] => 3
[selfscore_20] => 5
[supervisorscore_20] => 4
[selfscore_21] => 4
[supervisorscore_21] => 5
)
表格名称:评级
id | employee_id | question_id | self_score | supervisor_score
-----------------------------------------------------------------
1 | 205 | 19 | 4 | 3
2 | 205 | 20 | 5 | 4
3 | 205 | 21 | 4 | 5
注意:有两个人参与提供分数。一个是主管,另一个是主管
受监管人提供的分数保存在名为自我分数的列中。在表中,employee_id是被监管人的id主管还对同一个问题给主管评分,如表A所示
我已经从数据库中生成了数据作为数组,如下所示:
$params = Array
(
[selfscore_19] => 4
[supervisorscore_19] => 3
[selfscore_20] => 5
[supervisorscore_20] => 4
[selfscore_21] => 4
[supervisorscore_21] => 5
)
注意:在名为[selfscore\u 19]的键中,selfscore\u是字符串,19是问题id
问题对于-“自我””和“主管””都是一样的
因此,我在名为“selfscore”和“supervisorscore”的字符串后面附加了问题id
在下面显示的数组中,键是:[selfscore\u 19],它已附加了问题id,即19,以及
该值为“self”提供的score,即4
其他数据也遵循类似的模式
尝试:
foreach ($arr_result as $key => $value) {
$exp_key = explode("_", $key);
$score[$exp_key[0]][] = array("question_id" => $exp_key[1], "score" => $value);
}
(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)
下面的代码显示了我迄今为止所做的尝试:
注意:我只展示了方法的主要部分
现在我想将当前输出转换为以下输出的形式。
虽然我已经研究过这个案例,但我发现它有点棘手。
我应该做什么修改以实现所需的输出?
非常感谢您的建议。
所需输出:
foreach ($arr_result as $key => $value) {
$exp_key = explode("_", $key);
$score[$exp_key[0]][] = array("question_id" => $exp_key[1], "score" => $value);
}
(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)
用一个循环来做。使用
$exp\u key
的第一部分作为结果数组的键,第二部分作为子数组的问题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
我想我建议您使用一个
联合
来连接两个简单的查询,这样您的初始结果集就非常接近您想要的结果(接近到可以简单地迭代和/或修改它)
SQL:()
结果集:
如果您对PDO解决方案持开放态度,将非常方便。如何创建$params数组?你不应该一开始就得到这样的数组。有没有可能是用pdo查询的?多维阵列准备过程中有太多的间接步骤。您对PDO解决方案开放吗?