Seperti yang Anda lihat pada kode di bawah ini, ada dua janji temu pada 13-01-2020 tetapi mereka dihasilkan sebagai larik terpisah. Bagaimana saya bisa menempatkan keduanya pada array yang sama karena mereka berada di hari yang sama? Saya mengambil semua informasi dari database menggunakan mysqli tetapi demi kode ini saya hanya mencetak yang diperlukan. Ini berfungsi tetapi saya perlu tahu cara mengumpulkan janji temu yang memiliki tanggal yang sama dalam array yang sama.

php

//declare variable
$result = array();

//iterate
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'];


$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 jquery
header('Content-Type: application/json');
echo json_encode($result);

php ini mencetak ini

[{"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"}
                        }
                        }
                     ]

tetapi hasil yang saya inginkan adalah ini

[{
        "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": "2",
            "badgeClass": "",
            "url": "url",
            "dayEvents": [{
                    "title": "John Doe",
                    "status": "Booked",
                    "time": "2:00 pm - 5:00 pm"
                },
                {
                    "title": "Alfred Doe",
                    "status": "Booked",
                    "time": "11:00 am - 12:00 pm"
                }
            ]
        }
    }
]
-1
Grogu 17 Januari 2020, 12:22

2 jawaban

Jawaban Terbaik

Kode ini saat membuat jadwal, membuat acara setiap hari yang diindeks oleh tanggal itu sendiri, lalu ketika acara baru ditemukan, ia akan memeriksa apakah tanggal ini sudah ditetapkan. Jika demikian, itu akan menambah jumlah dan menambahkan acara baru. Satu-satunya komplikasi adalah ia perlu memeriksa apakah hanya memiliki 1 entri yang ada - ini perlu dikonversi ke array terlebih dahulu. Untuk menghapus indeks, json_encode() menggunakan array_values() terlebih dahulu...

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);
1
Nigel Ren 17 Januari 2020, 09:41

Berdasarkan pengamatan saya pada kode yang diberikan di atas dan output yang diinginkan, Anda dapat melakukan sesuatu seperti ini:

$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);

Sesuatu yang Perlu Diperhatikan di sini:

1.) Saya telah memberikan basis kode pada entri pertama di output yang disediakan. jika Anda ingin masuk lebih dalam, daripada menggunakan stdClass pada $dayEvents, Anda dapat langsung mendeklarasikan $dayEvents sebagai array dan menggunakan stdClass individual di dalamnya dan mendorongnya ke dayEvents seperti yang telah saya lakukan untuk larik $finalResult.

2.) Anda mungkin menerima pemberitahuan untuk $my_schedule_start dan $my_schedule_end yang tidak dideklarasikan sebelumnya, jadi saya mengambil kebebasan untuk mendeklarasikannya di luar loop While dengan nilai kosong. Tapi jangan ragu untuk mengubahnya sesuai dengan kebutuhan Anda.

3.) Jika $res = new stdClass; tidak berfungsi maka Anda dapat mencoba $res = new \stdClass sebagai gantinya.

4.) Jika Anda menemukan kesalahan sintaks, mohon maafkan saya karena saya juga Manusia :)

Ringkasan:

StdClass adalah fitur internal PHP untuk mendeklarasikan objek dalam PHP. Anda juga dapat menggunakan sintaks pendek seperti $dayEvents = {}; alih-alih $dayEvents = new stdClass;.

Anda dapat menemukan informasi lebih lanjut di stdClass Di sini

Semoga ini membantu.

0
Kishen Nagaraju 17 Januari 2020, 09:44