php - 如何在php中使用mysql查询多维数组?

标签 php mysql json codeigniter multidimensional-array

我在 mysql 中使用三个表和一个查询来检索特定用户。

我从查询中得到了我想要的结果,但它的格式不正确。

我的查询:

 public function get_all_payslips()
                {
                    $empid = $this->session->userdata('EMPLOYEE_ID');
                    $orgid = $this->session->userdata('CURRENT_ORG_ID');                    
                    $where = "EMPLOYEE_ID ='".$empid."' ";
                    $response = array();
                    $queryString = "SELECT
                                    em.EMPLOYEE_ID,
                                    em.EMPLOYEE_NAME
                                    FROM                                   
                                    uk_new_salary_slip assd,
                                    employee_master em
                                    WHERE
                                    em.".$where."
                                    GROUP BY em.EMPLOYEE_ID
                                    order by em.EMPLOYEE_NAME asc";                            
                    $query = $this->db->query($queryString);

                    foreach ($query->result() as $data) 
                    {         
                        $result = array();
                        $result['EMPLOYEE_NAME'] = $data-> EMPLOYEE_NAME;
                        $queryString = "SELECT
                                    mo.months,
                                    MONTH((assd.pay_period)) as monthss,
                                    YEAR((assd.pay_period)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(assd.id)) as action,
                                    GROUP_CONCAT(DISTINCT(assd.ORG_ID)) as org
                                    FROM                         
                                    uk_new_salary_slip assd,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    assd.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((assd.pay_period))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";
                        $queryString1 = "SELECT
                                    mo.months,
                                    MONTH((germany.pay_from)) as monthss,
                                    YEAR((germany.pay_from)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(germany.id)) as action,
                                    GROUP_CONCAT(DISTINCT(germany.ORG_ID)) as org
                                    FROM                         
                                    new_germany_salary_slip germany,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    germany.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((germany.pay_from))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";
                        $queryString2 = "SELECT
                                    mo.months,
                                    MONTH((poland.pay_from)) as monthss,
                                    YEAR((poland.pay_from)) as PAY_YEAR,
                                    GROUP_CONCAT(DISTINCT(poland.id)) as action,
                                    GROUP_CONCAT(DISTINCT(poland.ORG_ID)) as org
                                    FROM                         
                                    new_poland_salary_slip poland,
                                    employee_master em,                               
                                    months mo
                                    WHERE
                                    poland.emp_id =  ". $data->EMPLOYEE_ID ."
                                      AND mo.id =  MONTH((poland.pay_from))
                                      GROUP BY monthss,PAY_YEAR
                                      order by PAY_YEAR desc";

                        $query1 = $this->db->query($queryString);                       
                        $query2 = $this->db->query($queryString1);
                        $query3 = $this->db->query($queryString2);                  


                        $children = array();
                        foreach ($query1->result() as $data1)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data1->months;
                                $yearArray['year'] = $data1->PAY_YEAR;
                                $yearArray['org'] = $data1->org;                            
                                $yearArray['action'] = $data1->action;
                                array_push($children, $yearArray);
                            }
                        foreach ($query2->result() as $data2)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data2->months;
                                $yearArray['year'] = $data2->PAY_YEAR;
                                $yearArray['org'] = $data2->org;                            
                                $yearArray['action'] = $data2->action;
                                array_push($children, $yearArray);
                            }
                        foreach ($query3->result() as $data3)
                            {
                                $yearArray = array();                          
                                $yearArray['month'] = $data3->months;
                                $yearArray['year'] = $data3->PAY_YEAR;
                                $yearArray['org'] = $data3->org;                            
                                $yearArray['action'] = $data3->action;
                                array_push($children, $yearArray);
                            }
                            $result['children'] = $children;
                            array_push($response, $result);

                    }                   
                    return $response;                   
                }

如果在 month数组 year与 IN action 相同值应该是 4,2 。如果您在对象中看到第 0 个和第 4 个月份和年份相同,那么两个对象的 action值应该在一行中,类似地它的 org值应该是 org:40,47分别。

{month:"FEBRUARY", year:"2018",org:"40,47",action:"4,2"}

我希望数据的格式如下,但在我的例子中,它为每个操作显示不同的行。

enter image description here

最佳答案

数组推送只是将元素添加到数组的末尾。这不是你想要的。您想要本质上复契约(Contract)一年和同一月的元素。为此,我们可以将其指定为第一个子数组键,并将数组值简单地附加到 orgaction:

    $output = array();
    foreach ($query1->result() as $data1) {
        $key = $data1->PAY_YEAR . $data1->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data1->months;
            $output[$key]['year'] = $data1->PAY_YEAR;
        }
        $output[$key]['org'][] = $data1->org;
        $output[$key]['action'][] = $data1->action;
    }
    foreach ($query2->result() as $data2) {
        $key = $data2->PAY_YEAR . $data2->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data2->months;
            $output[$key]['year'] = $data2->PAY_YEAR;
        }
        $output[$key]['org'][] = $data2->org;
        $output[$key]['action'][] = $data2->action;
    }
    foreach ($query3->result() as $data3) {
        $key = $data3->PAY_YEAR . $data3->months;
        if (!isset($output[$key]['month'])) {
            $output[$key]['month'] = $data3->months;
            $output[$key]['year'] = $data3->PAY_YEAR;
        }
        $output[$key]['org'][] = $data3->org;
        $output[$key]['action'][] = $data3->action;
    }
    echo '<pre>';
    print_r(array_keys($output));

关于php - 如何在php中使用mysql查询多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892948/

相关文章:

mysql - 错误消息 : Unable to get connection, 数据源无效: "java.sql.SQLException: Cannot create JDBC driver of class ' ' 对于连接 URL 'null' ”

php - 将数据集显示为单个帖子

python - 无法对来自 json 的键的内容进行编码

javascript - 将值直接放入输入文本框形式?

javascript - 将数组从 PHP 返回到 JavaScript,无需 JSON

php - 遍历数组并输入数据库

php - 共享 vs 专用 php 库

php - 获取字符串的中间 - 删除左侧和右侧

php - 多次选择相同的值

java - 将 XML 字符串转换为 JSON 对象