Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为数组的键对和值对提供自定义名称_Php_Arrays - Fatal编程技术网

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解决方案开放吗?