PHP-将资源从PHP推送到为不同资源/dayofweek嵌套的JSON时出错

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

我从SQL中获得了以下结果集:

我的PHP代码:

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没有错误,但是如何推送下一个资源。请先阅读问题。