Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 将JSON对象格式化为JSON对象数组_Php_Arrays_Json_Slim - Fatal编程技术网

Php 将JSON对象格式化为JSON对象数组

Php 将JSON对象格式化为JSON对象数组,php,arrays,json,slim,Php,Arrays,Json,Slim,我搜索谷歌已经有一段时间了,但还没有接近我要找的东西 从服务器上的REST API中,我得到以下响应: {“小时”:6,“天”:“星期五”{“小时”:3,“天”:“星期三”{“小时”:6,“天”:“星期一”{“小时”:9,“天”:“星期四”{“小时”:12,“天”:“星期二”{“小时”:3,“天”:“星期五” 这只是JSON对象的一个长字符串。如何让这些对象在PHP中以JSON对象数组的形式返回 [ {“小时”:6,“天”:“星期五”}, {“小时”:3,“天”:“星期三”}, {“小时”:6,

我搜索谷歌已经有一段时间了,但还没有接近我要找的东西

从服务器上的REST API中,我得到以下响应:

{“小时”:6,“天”:“星期五”{“小时”:3,“天”:“星期三”{“小时”:6,“天”:“星期一”{“小时”:9,“天”:“星期四”{“小时”:12,“天”:“星期二”{“小时”:3,“天”:“星期五”

这只是JSON对象的一个长字符串。如何让这些对象在PHP中以JSON对象数组的形式返回

[
{“小时”:6,“天”:“星期五”},
{“小时”:3,“天”:“星期三”},
{“小时”:6,“日”:“周一”},
{“小时”:9,“天”:“星期四”},
{“小时”:12,“天”:“星期二”},
{“小时”:3,“天”:“星期五”}
]

我正在使用Slim框架,主要用于处理路由调用

我的PHP如下所示:

function getHoursbyId($id) {

    $app = \Slim\Slim::getInstance();

    $query = 'SELECT hours, day FROM prof_hours
              JOIN professors ON professors.id=prof_hours.prof_id
              WHERE professors.id=?;';

    $stmt = $this->connection->prepare($query);
    $stmt->bind_param("i", $id);

    if($stmt->execute()) {
        $stmt->bind_result($hours, $day);

        while ($stmt->fetch()) {
            $result['hours'] = $hours;
            $result['day'] = $day;

            echo jsonResponse('200', $result);

        }

        $stmt->close();

        return $result;
    } else {
        return NULL;
    }

}
$result
是一个数组,被传递到函数
jsonResponse()


我假设jsonResponse中的某个地方存在我的问题,但我将如何解决这个问题?

如何修复PHP脚本:

现在,您将分别打印每个项目

相反,构建一个数组,并在最后使用
json\u encode()
对其进行响应


然后您将得到有效的JSON响应。

看起来您正在为每一行回显jsonResponse。因此,当前对于从数据库中获得的每一行,您都要求应用程序回显其
json\u encode
'd值。这就是为什么会得到一个json对象的非分隔字符串

您需要做的是将所有行构建到一个数组中,然后将其发送到输出函数

尝试:

function jsonResponse($httpStatus, $response) {
$app = \Slim\Slim::getInstance();
$app->status($httpStatus);

$app->contentType('application/json');

echo json_encode($response);
}
$items = array();

// adding (in the loop)
$items[] = array('hours'=>$hours, 'day'=>$day);

// at the end
echo json_encode($items);
...

$results = array();
while ($stmt->fetch()) {
    $results[] = array(
        'hours' => $hours,
        'day' => $day
    );
}
echo jsonResponse('200', $results);
...