\PDO::FETCH_ASSOC, \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'" ]); // $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE , PDO::FETCH_ASSOC ); $filter = isset($_GET['filter']) ? $_GET['filter'] : ''; $dy_mapper = array(); $line_mapper = array(); $line_dy_mapper = array(); $tower_mapper = array(); $tower_line_mapper = array(); $stmt = $db->query("SELECT * FROM dy_level WHERE status=1"); $rows = $stmt->fetchAll(); $stmt = null; $result = array(); foreach ($rows as $row) { $dy_mapper[$row['id']] = count($result); $row['lines'] = array(); array_push($result, $row); } $stmt = $db->query("SELECT * FROM `lines` WHERE status=1"); $rows = $stmt->fetchAll(); $stmt = null; foreach ($rows as $row) { $dy_id = intval($row['dy_level_id']); if (!isset($dy_mapper[$dy_id])) { continue; } $line_id = intval($row['id']); $dy_idx = $dy_mapper[$dy_id]; $line_mapper[$line_id] = count($result[$dy_idx]['lines']); $line_dy_mapper[$line_id] = $dy_id; $row['towers'] = array(); array_push($result[$dy_idx]['lines'], $row); } $stmt = $db->query("SELECT * FROM towers WHERE status=1"); $rows = $stmt->fetchAll(); $stmt = null; $towers = array(); foreach ($rows as $row) { $line_id = intval($row['line_id']); if (!isset($line_mapper[$line_id])) { continue; } $tower_id = intval($row['id']); $tower_line_mapper[$tower_id] = $line_id; $dy_id = intval($line_dy_mapper[$line_id]); $dy_idx = $dy_mapper[$dy_id]; $line_idx = $line_mapper[$line_id]; $tower_mapper[$tower_id] = count($result[$dy_idx]['lines'][$line_idx]['towers']); $row['terminals'] = array(); array_push($result[$dy_idx]['lines'][$line_idx]['towers'], $row); } $sql = "SELECT * FROM terminals WHERE status=1"; if ($filter == 'ws') { $sql = "SELECT t1.* FROM terminals AS t1 JOIN terminal_status AS t2 ON t1.id=t2.term_id WHERE t1.status=1 AND t2.ws_update_time <>0"; } else if ($filter == 'rs') { $sql = "SELECT t1.* FROM terminals AS t1 JOIN terminal_status AS t2 ON t1.id=t2.term_id WHERE t1.status=1 AND t2.rs_update_time <>0"; } else if ($filter == 'bi') { $sql = "SELECT * FROM terminals WHERE id IN (SELECT distinct term_id FROM terminal_basic_info_history) AND status=1"; } else if ($filter == 'gps') { $sql = "SELECT * FROM terminals WHERE id IN (SELECT distinct term_id FROM terminal_position_history) AND status=1"; } $stmt = $db->query($sql); $rows = $stmt->fetchAll(); $stmt = null; foreach ($rows as $row) { $tower_id = intval($row['tower_id']); if (!isset($tower_mapper[$tower_id])) { continue; } $tower_idx = $tower_mapper[$tower_id]; $line_id = $tower_line_mapper[$tower_id]; $line_idx = $line_mapper[$line_id]; $dy_id = $line_dy_mapper[$line_id]; $dy_idx = $dy_mapper[$dy_id]; array_push($result[$dy_idx]['lines'][$line_idx]['towers'][$tower_idx]['terminals'], $row); } header ('Content-type: application/json; charset=utf-8'); echo json_encode($result, JSON_UNESCAPED_UNICODE);