PHP-将资源从PHP推送到为不同资源/dayofweek嵌套的JSON时出错
我从SQL中获得了以下结果集: 我的PHP代码:PHP-将资源从PHP推送到为不同资源/dayofweek嵌套的JSON时出错,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我从SQL中获得了以下结果集: 我的PHP代码: function getMasterBookRoomsaAvailability(){ $DisponibilitaRoom = [ 'Resource' => null, 'IntervalTime' => [], ]; $conn = new mysqli($this->servername, $this->username, $this->passwo
function getMasterBookRoomsaAvailability(){
$DisponibilitaRoom = [
'Resource' => null,
'IntervalTime' => [],
];
$conn = new mysqli($this->servername, $this->username, $this->password,$this->MySQLDB);
$sql = "SELECT IDRoom,Nomeroom,Dayofweek,Nome,Aperto,OrarioApertura,OrarioChiusura,Durataminuti FROM room
INNER JOIN giorni ON room.IDRoom = giorni.FKRoom
INNER JOIN durategame ON room.IDRoom = durategame.FKRoom
WHERE room.Statobloccato <> 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row/*
while($row = $result->fetch_assoc()) {
$IDRoom = $row['IDRoom'];
$Nomeroom = $row['Nomeroom'];
$Dayofweek = $row['Dayofweek'];
$Nome = $row['Nome'];
$Aperto = $row['Aperto'];
$OrarioApertura = $row['OrarioApertura'];
$OrarioChiusura = $row['OrarioChiusura'];
$Durataminuti = $row['Durataminuti'];
$DisponibilitaRoom['Resource'] = $Nomeroom;
$DisponibilitaRoom['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);
}
}
return $DisponibilitaRoom;
}
// Funzione: prende tutti gli orari di intervallo tra due date splittate dalla durata.
// Params: Array contenente Orario Apertura della room, Orario di chiusura della room, durata prenotabile
// Resultset: restituisce un Array contenente gli orari disponibili
function selectTimesOfDay($startTime,$endTime,$duratagame) {
$hours = null;
//var_dump($DisponibilitaRoom);
$open_time = strtotime($startTime);
$close_time = strtotime($endTime);
$duratagame = $duratagame * 60;
$output = "";
for( $i=$open_time; $i<$close_time; $i+=$duratagame) {
//if( $i < $now) continue;
$output = date("H:i",$i);
$hours[] = date('H:i', $i);
}
return $hours;
}
echo json_encode($RB->getMasterBookRoomsaAvailability());
我的结果是:{Resource:Padel 1,时间间隔:{Lun:[11:00],Mar:[11:00],Mer:[11:00],Gio:[11:00,12:00,13:00,14:00,15:00,16:00,17:00,18:00],Ven:[11:00],Sab:[11:00],Sun:[09:00,10:00,11:00,12:00,13:00,14:00,15:00,16:00,17:00,18:00]}
但网球1资源和所有it可用时间都缺失了。
我不知道正确的方法,你知道吗?
我期待着这样的事情:
资源
-帕德尔1
-LUN['09:00'、'10:00'、'11:00']
-三月['09:00','10:00']
...
-网球1
-LUN['09:00'、'10:00'、'11:00']
-三月['09:00','10:00']
我会尝试改变这一点:
$DisponibilitaRoom['Resource'] = $Nomeroom;
$DisponibilitaRoom['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);
为此,要附加房间而不是替换房间,请执行以下操作:
$DisponibilitaRoom[$Nomeroom]['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);
下面的答案只是一个用于解决您的问题的示例 在普通的php查询中,您可以执行如下操作来获取php返回的所有json数据
<?php
$host = "localhost";
$user = "ryour username";
$password = "your password";
$dbname = "your bd name";
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
echo "cannot connect to db";
}
$return_arr = array();
$query = "SELECT IDRoom,Nomeroom,Dayofweek,Nome,Aperto,OrarioApertura,OrarioChiusura,Durataminuti FROM room
INNER JOIN giorni ON room.IDRoom = giorni.FKRoom
INNER JOIN durategame ON room.IDRoom = durategame.FKRoom
WHERE room.Statobloccato <> 1";
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
$IDRoom = $row['IDRoom'];
$Nomeroom = $row['Nomeroom'];
$Dayofweek = $row['Dayofweek'];
$Nome = $row['Nome'];
$Aperto = $row['Aperto'];
$OrarioApertura = $row['OrarioApertura'];
$OrarioChiusura = $row['OrarioChiusura'];
$Durataminuti = $row['Durataminuti'];
$return_arr[] = array("IDRoom" => $IDRoom,
"Nomeroom" => $Nomeroom,
"Dayofweek" => $Dayofweek,
"Dayofweek" => $Dayofweek,
"Nome" => $Nome,
"Aperto" => $Aperto,
"OrarioChiusura" => $OrarioChiusura,
"OrarioChiusura" => $OrarioChiusura,
"Durataminuti" => $Durataminuti,
);
}
// Encoding array in JSON format
echo json_encode($return_arr);
?>
为了帮助回答您的问题,您可以模拟上面的代码,从而得到下面的模拟答案。试试看是否有帮助
//function getMasterBookRoomsaAvailability(){
$DisponibilitaRoom = [
'Resource' => null,
'IntervalTime' => [],
];
$return_arr = array();
$conn = new mysqli($this->servername, $this->username, $this->password,$this->MySQLDB);
$sql = "SELECT IDRoom,Nomeroom,Dayofweek,Nome,Aperto,OrarioApertura,OrarioChiusura,Durataminuti FROM room
INNER JOIN giorni ON room.IDRoom = giorni.FKRoom
INNER JOIN durategame ON room.IDRoom = durategame.FKRoom
WHERE room.Statobloccato <> 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row/*
while($row = $result->fetch_assoc()) {
$IDRoom = $row['IDRoom'];
$Nomeroom = $row['Nomeroom'];
$Dayofweek = $row['Dayofweek'];
$Nome = $row['Nome'];
$Aperto = $row['Aperto'];
$OrarioApertura = $row['OrarioApertura'];
$OrarioChiusura = $row['OrarioChiusura'];
$Durataminuti = $row['Durataminuti'];
$DisponibilitaRoom['Resource'] = $Nomeroom;
$DisponibilitaRoom['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);
$return_arr[] = array("IDRoom" => $IDRoom,
"Nomeroom" => $Nomeroom,
"Dayofweek" => $Dayofweek,
"Dayofweek" => $Dayofweek,
"Nome" => $Nome,
"Aperto" => $Aperto,
"OrarioChiusura" => $OrarioChiusura,
"OrarioChiusura" => $OrarioChiusura,
"DisponibilitaRoom" => $Nomeroom,
"DisponibilitaRoom1" => $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti)
);
}
}
return $DisponibilitaRoom;
}
// Funzione: prende tutti gli orari di intervallo tra due date splittate dalla durata.
// Params: Array contenente Orario Apertura della room, Orario di chiusura della room, durata prenotabile
// Resultset: restituisce un Array contenente gli orari disponibili
function selectTimesOfDay($startTime,$endTime,$duratagame) {
$hours = null;
//var_dump($DisponibilitaRoom);
$open_time = strtotime($startTime);
$close_time = strtotime($endTime);
$duratagame = $duratagame * 60;
$output = "";
for( $i=$open_time; $i<$close_time; $i+=$duratagame) {
//if( $i < $now) continue;
$output = date("H:i",$i);
$hours[] = date('H:i', $i);
}
return $hours;
//}
echo json_encode($return_arr);
每次只覆盖循环中的数据。是的,它肯定会被覆盖,但如何推送下一个资源?一周中的每一天都有一行nbk的可能重复项生成JSON没有错误,但是如何推送下一个资源。请先阅读问题。