Etkinlikleri Tarihe Göre Sıralama
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 62 / 68.
Görev
Kolayİki girdi alacaksınız: bir etkinlik dizisini temsil eden bir JSON dizesi ve bugünün tarihini temsil eden YYYY-MM-DD formatında bir tarih dizesi.
İlk girdi şu formatta bir JSON dizesi olacaktır: [{"name":"Team Meeting","date":"2024-04-15","location":"Office"},{"name":"Conference","date":"2024-05-20","location":"Convention Center"},{"name":"Workshop","date":"2024-03-10","location":"Library"}]
İkinci girdi şu formatta bir tarih dizesi olacaktır: 2024-04-01
Her iki girdiyi de okuyun ve JSON dizesini bir etkinlik dizisine (events array) dönüştürün. Etkinlikleri yalnızca yaklaşan etkinlikleri (tarihi bugünün tarihine eşit veya daha büyük olan etkinlikler) içerecek şekilde filtreleyin.
Yaklaşan etkinlikleri, özel bir karşılaştırma fonksiyonu ile usort() kullanarak tarihlerine göre artan sırada (en erken tarih önce gelecek şekilde) sıralayın. Karşılaştırma fonksiyonu, iki etkinliğin tarihlerini karşılaştırmalı ve sıralarını belirleyen bir değer döndürmelidir.
Sıralamadan sonra, yaklaşan her etkinliği aşağıdaki formatta yazdırın:
Upcoming: [name] on [date] at [location]
Her etkinliği, en erken tarihten en geç tarihe doğru kronolojik sırada, ayrı bir satıra yazdırın.
Girdi formatı:
- İlk satır:
name,datevelocationanahtarlarını içeren etkinlik dizisini temsil eden bir JSON dizesi - İkinci satır: Bugünün tarihini temsil eden YYYY-MM-DD formatında bir tarih dizesi (örnek:
2024-04-01)
Beklenen çıktı: Yaklaşan her etkinliğin kronolojik sırada, her biri ayrı bir satırda şu formatta yazdırılması: Upcoming: [name] on [date] at [location]
Kendin dene
<?php
// Etkinliklerin JSON dizesini oku
$eventsJson = fgets(STDIN);
$events = (array)json_decode($eventsJson, true);
// Bugünün tarihini oku
$todayDate = trim(fgets(STDIN));
// TODO: Kodunuzu aşağıya yazın
// Gelecek etkinlikleri filtrele (tarih >= bugünün tarihi)
// Gelecek etkinlikleri usort() kullanarak tarihe göre sırala
// Her bir gelecek etkinliği istenen formatta yazdır
?>Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama6Yüksek Mertebeden Dizi Fonksiyonları
'array_map' ile DönüştürmeÖzel Fonksiyon ile 'array_map''array_filter' ile FiltrelemeÖzel Fonksiyon ile 'array_filter''array_reduce' ile İndirgeme'array_walk' ile GezinmeÖzet: Veri İşleme9Etkinlik Planlayıcı
Etkinlik VerisiYeni Etkinlik Ekleme