【发布时间】:2018-07-16 05:21:00
【问题描述】:
我很困惑,在获得如下图所示的输出时遇到了问题 所需输出
我有一个名为 number_status 的数据库表,我在其中存储带有时间戳的数字在线和离线历史记录。我需要在我的 android 应用程序中获取显示数据的 json 响应,如上图。我可以像下面的函数一样得到它
public function compareNumber($firstNumber, $secondNumber, $email, $date) {
$response = array('code' => 0, 'error' => false);
$endDate = date('Y-m-d', strtotime("+1 day", strtotime($date))) . " " . explode(" ", $date)[1];
$stmt = $this->conn->prepare("SELECT id FROM user WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
$user = $result->fetch_assoc();
$user_id = $user['id'];
$stmt->close();
$response["received"] = $date;
$response["created_at"] = $date;
$response["end"] = $endDate;
$response["code"] = 1;
$arr = $this->helperNumber($firstNumber, $date, $endDate, $user_id);
$arr1 = $this->helperNumber($secondNumber, $date, $endDate, $user_id);
$response["logs"] = array_merge($arr, $arr1);
}
return $response;
}
public function helperNumber($numberToSearch, $date, $endDate, $user_id) {
$stmt = $this->conn->prepare("SELECT number, number_status, status_time FROM number_status WHERE number = ? AND user_id=? AND status_time > ? AND status_time < ? ORDER BY status_time DESC");
$stmt->bind_param("iiss", $numberToSearch, $user_id, $date, $endDate);
$stmt->execute();
$result = $stmt->get_result();
$number = array();
if ($result->num_rows) {
$lastrow = null;
$i = 0;
while($row = $result->fetch_assoc()) {
if(!isset($number[$i]))
$number[$i] = array('number' => $row['number'], 'start_time' => false, 'end_time' => false);
if($lastrow == null){
// take offline as first entry
if($row['number_status'] == 0) {
$number[$i]['end_time'] = $row['status_time'];
}
} else {
// if two repeated entry for online/offline skip it
if($lastrow['number_status'] == 0 && $row['number_status'] == 0)
continue;
if($lastrow['number_status'] == 1 && $row['number_status'] == 1)
continue;
if($row['number_status'] == 1){
$number[$i]['start_time'] = $row['status_time'];
}
else {
$number[$i]['end_time'] = $row['status_time'];
}
if($number[$i]['start_time'] && $number[$i]['end_time'])
$i++;
}
$lastrow = $row;
}
}
$stmt->close();
return $number;
}
我正在收到上述函数的 json 响应,如下所示
{"code":1,"error":false,"received":"2018-07-15 00:00:00","created_at":"2018-07-15 00:00:00","end":"2018-07-16 00:00:00","logs":[{"number":"919400000001","start_time":"2018-07-15 16:11:04","end_time":"2018-07-15 16:12:03"},{"number":"919400000001","start_time":"2018-07-15 10:35:47","end_time":"2018-07-15 10:37:34"},{"number":"919400000001","start_time":"2018-07-15 10:31:03","end_time":"2018-07-15 10:33:43"},{"number":"919400000001","start_time":"2018-07-15 10:27:28","end_time":"2018-07-15 10:27:46"},{"number":"919400000001","start_time":"2018-07-15 10:26:55","end_time":"2018-07-15 10:27:26"},{"number":"919400000001","start_time":"2018-07-15 10:25:38","end_time":"2018-07-15 10:25:50"},{"number":"919400000001","start_time":"2018-07-15 10:24:51","end_time":"2018-07-15 10:25:14"},{"number":"919400000000","start_time":"2018-07-15 10:55:18","end_time":"2018-07-15 16:11:04"},{"number":"919400000000","start_time":"2018-07-15 10:33:50","end_time":"2018-07-15 10:34:04"},{"number":"919400000000","start_time":"2018-07-15 10:27:20","end_time":"2018-07-15 10:27:38"},{"number":"919400000000","start_time":"2018-07-15 10:25:42","end_time":"2018-07-15 10:25:57"},{"number":"919400000000","start_time":"2018-07-15 10:24:57","end_time":"2018-07-15 10:25:22"}]}
但我想按结束时间排序(离线)。我不知道我该怎么做。在我的数据库表中有单独的在线(开始时间)和离线(结束时间)条目。让我知道是否有人可以帮助我获得它。 谢谢
【问题讨论】: