【问题标题】:PHP - Error to push Resources from PHP to JSON nested for different resource/dayofweekPHP - 将资源从 PHP 推送到嵌套不同资源/星期几的 JSON 时出错
【发布时间】:2020-02-10 07:56:34
【问题描述】:

我有这个来自 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","IntervalTime":{"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”资源及其所有可用时间。
我不知道语义正确的方式,你知道吗? 我期待这样的事情:

资源
- 帕德尔 1
-- LUN ['09:00','10:00','11:00']
-- 三月 ['09:00','10:00']
...
- 网球 1
-- LUN ['09:00','10:00','11:00']
-- 三月 ['09:00','10:00']

【问题讨论】:

  • 你每次只覆盖循环中的数据。
  • 是的,它肯定被覆盖了,但是如何推送下一个“资源”呢?一周中的每一天都有一行
  • nbk 我没有错误生成 JSON,但是如何推送下一个资源。请先阅读问题。

标签: php mysql arrays json


【解决方案1】:

我会尝试改变这个:

$DisponibilitaRoom['Resource'] = $Nomeroom; 
$DisponibilitaRoom['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);

为此,追加房间而不是替换:

$DisponibilitaRoom[$Nomeroom]['IntervalTime'][$Nome] = $this->selectTimesOfDay($OrarioApertura,$OrarioChiusura,$Durataminuti);

【讨论】:

    【解决方案2】:

    下面的答案只是一个旨在解决您的问题的说明。

    在普通的 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);
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多