使用带有MySQL数据的循环填充PHP关联数组

时间:2019-05-31 02:59:19

标签: php arrays json multidimensional-array associative-array

我正在创建简单的PHP,用于将数据输出到apexcharts javascript图表。为了使apexcharts可用的输出,我需要提供图的x和y值作为JSON。下面的代码,我写了输出预期的JSON。

$data_arr = array();

    global $mysqli_conn;
    $result = $mysqli_conn->query("sql");
    $sql_out = array();
    $sql_out = $result->fetch_all(MYSQLI_ASSOC);
    $num_rows = mysqli_num_rows($result);

        if ($num_rows < 1){
            echo "zero";
        }else{
            foreach($sql_out as $item) {
                $data_arr['x'][] = $item['time'];
                $data_arr['y'][] = $item['status_code'];
            }
        }



$test_arr = array(
    array(
        "name"=>"lock",
        "data"=>array($data_arr),
    )
);

echo json_encode($test_arr);

我期望的json输出如下所示

[
    {
        "name": "lock",
        "data": [
                    {
                        "x": "2019-05-30 07:53:07",
                        "y": "1470"
                    },
                    {
                        "x": "2019-05-29 07:52:27",
                        "y": "1932"
                    }
                ]
    }
]

但是当我从代码中请求数据时,我得到了类似的东西

[
    {
        "name": "lock",
        "data": [
            {
                "x": [
                    "2019-05-30 07:53:07",
                    "2019-05-29 07:52:27",
                    "2019-05-26 15:46:56",
                    "2019-05-25 07:39:24"
                ],
                "y": [
                    "1470",
                    "1932",
                    "1940",
                    "1470"
                ]
            }
        ]
    }
]

如何从PHP代码创建预期的JSON结果?

1 个答案:

答案 0 :(得分:1)

您正在单独的空间中创建它们。声明并推送它们时,请将它们放在一个容器中:

foreach ($sql_out as $item) {
    $data_arr[] = array(
        'x' => $item['time'],
        'y' => $item['status_code']
    );
}

执行此操作时:

$data_arr['x'][] = $item['time'];
$data_arr['y'][] = $item['status_code'];

它们分别位于x和y容器中,因此您得到的格式错误,就像您显示的格式一样。

当您将它们声明为:

$data_arr[] = array(
    'x' => $item['time'],
    'y' => $item['status_code']
);

您基本上是在告诉说要把整个子批次都推在一起。