亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 PHP while 語句構建多維 json 數組?

如何使用 PHP while 語句構建多維 json 數組?

PHP
慕森王 2022-07-22 19:32:56
正如您在下面的代碼中看到的,2020-01-13 上有兩個約會,但它們是作為單獨的數組生成的。既然它們在同一天,我怎么能把它們放在同一個陣列上?我正在使用 mysqli 從數據庫中獲取所有信息,但為了這段代碼,我只打印必要的信息。它有效,但我需要知道如何在同一數組中收集具有相同日期的約會。php//declare variable$result = array();//iteratewhile($schedule = $result_data->fetch_assoc()){//start time conversion into american time// 24-hour time to 12-hour time $start_time  =date("g:i a", strtotime($schedule['start_time']));//end time conversion into american time$end_time  =date("g:i a", strtotime($schedule['end_time']));$my_schedule_start .= $start_time;$my_schedule_end .= $end_time;$schedule_date= $schedule['cleaning_date'];$result[] = array("$schedule_date" => [    "number"=>'1',    "badgeClass"=>'',    "url"=>'url',    "dayEvents"=>[    "title"=>$schedule['first_name'].' '.$schedule['last_name'],    "status"=>$schedule['cleaning_status'],    "time"=>$start_time .' - '.$end_time    ]]);  }//send response back to jqueryheader('Content-Type: application/json');echo json_encode($result);這個 php 打印這個[{"2020-01-15":{    "number":"1",    "badgeClass":"",    "url":"url",    "dayEvents":{        "title":"Jen Doe",        "status":"Booked",        "time":"11:00 am - 12:00 pm"}        }        },        {"2020-01-13":{            "number":"1",            "badgeClass":"",            "url":"url",            "dayEvents":{                "title":"John Doe",                "status":"Booked",                "time":"2:00 pm - 5:00 pm"}                }                },                {"2020-01-13":{                    "number":"1",                    "badgeClass":"",                    "url":"url",                    "dayEvents":{                        "title":"Alfred Doe",                        "status":"Booked",                        "time":"11:00 am - 12:00 pm"}                        }                        }                     ]
查看完整描述

2 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

此代碼在創建計劃時創建由日期本身索引的每一天事件,然后當發現新事件時,它將檢查該日期是否已設置。如果是這樣,它將增加計數并添加新事件。唯一的復雜之處是它需要檢查它是否只有 1 個現有條目 - 這需要首先轉換為數組。要刪除索引,首先json_encode()使用array_values()...


while($schedule = $result_data->fetch_assoc()){

    //start time conversion into american time

    // 24-hour time to 12-hour time

    $start_time  =date("g:i a", strtotime($schedule['start_time']));


    //end time conversion into american time

    $end_time  =date("g:i a", strtotime($schedule['end_time']));


    $my_schedule_start .= $start_time;

    $my_schedule_end .= $end_time;


    $schedule_date= $schedule['cleaning_date'];


    if ( isset($result[$schedule_date])){

        // Increment count

        $result[$schedule_date][$schedule_date]["number"]++;

        // Convert single item to array

        if ( !isset($result[$schedule_date][$schedule_date]["dayEvents"][0]))    {

            $result[$schedule_date][$schedule_date]["dayEvents"] = 

                [$result[$schedule_date][$schedule_date]["dayEvents"]];

        }

        // Add in new event to dayEvents

        $result[$schedule_date][$schedule_date]["dayEvents"][] = [

            "title"=>$schedule['first_name'].' '.$schedule['last_name'],

            "status"=>$schedule['cleaning_status'],

            "time"=>$start_time .' - '.$end_time

        ];


    }

    else    {

        // Create new days schedule

        $result[$schedule_date] = [

            "$schedule_date" => [

                "number"=>'1',

                "badgeClass"=>'',

                "url"=>'url',


                "dayEvents"=>[

                    "title"=>$schedule['first_name'].' '.$schedule['last_name'],

                    "status"=>$schedule['cleaning_status'],

                    "time"=>$start_time .' - '.$end_time

                ]

            ]

        ];

    }


}


header('Content-Type: application/json');

echo json_encode(array_values($result), JSON_PRETTY_PRINT);


查看完整回答
反對 回復 2022-07-22
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

根據我對上面提供的代碼和所需輸出的觀察,您可以執行以下操作:


$scheduledDate = date('Y-m-d');

$my_schedule_start = "";

$my_schedule_end = "";

$finalResult = [];


while($schedule = $result_data->fetch_assoc()){

    $start_time  =date("g:i a", strtotime($schedule['start_time']));

    $end_time  =date("g:i a", strtotime($schedule['end_time']));


    $my_schedule_start .= $start_time;

    $my_schedule_end .= $end_time;


    $schedule_date= $schedule['cleaning_date'];


    $res = new stdClass;


    $res->number = 1;

    $res->badgeClass = "";

    $res->url = 'url';


    $dayEvents = new stdClass;

    $dayEvents->title = $schedule['first_name'].' '.$schedule['last_name'];

    $dayEvents->status = $schedule['cleaning_status'];

    $dayEvents->time = $start_time .' - '.$end_time;


    $res->dayEvents = $dayEvents;

    $finalResult[] = $res;

}


echo json_encode($finalResult);

這里需要注意的地方:


1.) 我已經根據提供的輸出中的第一個條目給出了代碼庫。如果你想更深入,而不是使用stdClasson $dayEvents,你可以直接聲明$dayEvents為一個數組并stdClass在里面使用 individual 并將其推送到就像我為數組dayEvents所做的那樣。$finalResult


2.) 您可能會收到一個通知,$my_schedule_start并且$my_schedule_end之前沒有聲明,所以我冒昧地在 While 循環之外用空值聲明它們。但請隨時根據您的需要更改它們。


3.)如果$res = new stdClass;不起作用,那么您可以嘗試$res = new \stdClass。


4.)如果您發現任何語法錯誤,請原諒我,因為我也是人類:)


概括:


stdClass 是 PHP 的內部功能,用于在 PHP 中聲明對象。您還可以使用短語$dayEvents = {};法代替$dayEvents = new stdClass;.


您可以在此處找到有關 stdClass 的更多信息


希望這可以幫助。


查看完整回答
反對 回復 2022-07-22
  • 2 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號