PHP的while循环代替的foreach得到阵列数据
在后台我有REST API,代码:PHP的while循环代替的foreach得到阵列数据
$app->get('/tasks', 'authenticate', function() {
global $user_id;
$response = array();
$db = new DbHandler();
// fetch task
$result = $db->getAllUserTasks($user_id);
$result = $db->getAllUserTasks($user_id);
if ($result != NULL) {
$response["error"] = false;
$response["id"] = $result["id"];
$response["task"] = $result["task"];
$response["status"] = $result["status"];
$response["createdAt"] = $result["created_at"];
echoRespnse(200, $response);
} else {
$response["error"] = true;
$response["message"] = "The requested resource doesn't exists";
echoRespnse(404, $response);
}
});
,并使用此代码,我从阵列得到的只是第一个数据:
{
error: false
id: 2
task: "Create something"
status: 0
createdAt: "2014-12-01 01:58:42"
}
现在当我想获取所有数据写到:
if ($result != NULL) {
foreach ($result as $rez) {
$response["error"] = false;
$response["id"] = $rez["id"];
$response["task"] = $rez["task"];
$response["status"] = $rez["status"];
$response["createdAt"] = $rez["created_at"];
echoRespnse(200, $response);
}
} else {
$response["error"] = true;
$response["message"] = "The requested resource doesn't exists";
echoRespnse(404, $response);
}
所以用foreach循环相同的代码,但然后我得到:Unexpected token {
那有什么问题?我如何在这里实现WHILE
循环而不是foreach
???
更新功能:
public function getAllUserTasks($user_id) {
$stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
$stmt->bind_param("i", $user_id);
if ($stmt->execute()) {
$res = array();
$stmt->bind_result($id, $task, $status, $created_at);
// TODO
// $task = $stmt->get_result()->fetch_assoc();
$stmt->fetch();
$res["id"] = $id;
$res["task"] = $task;
$res["status"] = $status;
$res["created_at"] = $created_at;
$item[] = $res;
$stmt->close();
return $item;
} else {
return NULL;
}
}
商店的结果作为数组和发送整个数组时结束循环:
if ($result != NULL) {
$items = array();
foreach ($result as $rez) {
$response["error"] = false;
$response["id"] = $rez["id"];
$response["task"] = $rez["task"];
$response["status"] = $rez["status"];
$response["createdAt"] = $rez["created_at"];
$items[] = $response;
}
echoRespnse(200, $items);
} else {
$response["error"] = true;
$response["message"] = "The requested resource doesn't exists";
echoRespnse(404, $response);
}
而且echoRespnse()
应该json_encode在$项目阵列。
而且,在你的getAllUserTasks()
功能,你应该使用一个while循环来获取所有从数据库中的结果:
if ($stmt->execute()) {
$items = $res = array();
$stmt->bind_result($id, $task, $status, $created_at);
// fetch values
while ($stmt->fetch()) {
$res["id"] = $id;
$res["task"] = $task;
$res["status"] = $status;
$res["created_at"] = $created_at;
$items[] = $res;
}
$stmt->close();
return $items;
} else {
return NULL;
}
不错,但现在我得到了错误的数据是这样的:[4] 0:{ 错误:错误 ID:空 任务:空 状态:空 createdAt:空 } - 1:{ 错误:错误 ID: “C” 任务: “C” 状态: “C” createdAt: “C” } - 2:{ 错误:错误 ID:空 任务:null status:null createdAt:null } - 3:{ 错误:错误 ID: “2” 任务: “2” 状态: “2” createdAt: “2” } – LaraBeginer 2014-12-02 15:50:32
@LaraBeginer也许你实现我的建议错了地方?看我更新的例子。 – 2014-12-02 15:53:14
我再次得到公正:[1] 0:{ 错误:错误 ID:2 任务: “创造一些” 状态:0 createdAt: “2014年12月1日1时58分42秒” }这样只是第一个数据(来自任务的第一个用户任务)我将用功能更新代码getAllUserTasks()now – LaraBeginer 2014-12-02 15:57:13
到底在哪你得到“意外的标记{”? – 2014-12-02 15:40:43
是的,我这样做对不起,错在CDE – LaraBeginer 2014-12-02 15:41:04