Özet: Veri İşleme
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 45 / 68.
Görev
KolayÜç girdi alacaksınız: virgülle ayrılmış çalışan isimleri listesi, bu çalışanların haftalık çalışma saatlerine karşılık gelen virgülle ayrılmış bir liste ve bir minimum saat eşiği. İlk girdi Alice,Bob,Charlie,Diana,Eve formatında isimleri içerir, ikinci girdi 45,32,50,28,40 formatında sayı olarak saatleri içerir ve üçüncü girdi sayı olarak minimum saat eşiğidir (örnek: 35).
Her üç girdiyi de okuyun ve bunları uygun dizilere dönüştürün. Çalışan isimlerinin anahtar (key) ve çalışma saatlerinin değer (value) olduğu birleştirilmiş bir ilişkisel dizi (associative array) oluşturun. Ardından, yüksek seviyeli dizi fonksiyonlarını (higher-order array functions) kullanarak aşağıdaki işlemleri gerçekleştirin:
- Yalnızca minimum saat eşiğinde veya üzerinde çalışanları tutmak için özel bir geri çağırma (callback) fonksiyonu ile
array_filter()kullanın. - Filtrelenmiş çalışanlar için fazla mesai ücretini hesaplamak üzere özel bir geri çağırma fonksiyonu ile
array_map()kullanın (fazla mesai, 40 saatin üzerindeki her saattir ve normal saatlik 25$ ücretin 1.5 katı oranında ödenir). - Tüm filtrelenmiş çalışanlar arasındaki toplam fazla mesai ücretini hesaplamak için özel bir geri çağırma fonksiyonu ile
array_reduce()kullanın.
Sonuçları aşağıdaki formatta yazdırın:
- İlk olarak, her bir nitelikli çalışanın adını ve fazla mesai ücretini ayrı satırlarda
Name: $Amountformatında yazdırın (ondalık kısım 2 basamağa yuvarlanmış olarak). - Son olarak, toplam fazla mesai ücretini
Total: $Amountformatında yazdırın (ondalık kısım 2 basamağa yuvarlanmış olarak).
Hesaplama detayları:
- Normal çalışma saatleri (40 saate kadar): saat başına 25$
- Fazla mesai saatleri (40 saatin üzeri): saat başına 37.50$ (1.5 kat oran)
- Bir çalışan 40 saat veya daha az çalışmışsa, fazla mesai ücreti 0.00$'dır.
Girdi formatı:
- Birinci satır: Virgülle ayrılmış çalışan isimleri (örnek:
Alice,Bob,Charlie,Diana,Eve) - İkinci satır: Sayı olarak virgülle ayrılmış çalışma saatleri (örnek:
45,32,50,28,40) - Üçüncü satır: Sayı olarak minimum saat eşiği (örnek:
35)
Beklenen çıktı: Her bir nitelikli çalışan ve fazla mesai ücretleri ayrı satırlarda, ardından toplam fazla mesai ücreti; tüm tutarlar ondalık kısım 2 basamak olacak şekilde formatlanmalıdır.
Kendin dene
<?php
// Girdileri oku
$names = explode(',', trim(fgets(STDIN)));
$hours = explode(',', trim(fgets(STDIN)));
$minHours = intval(trim(fgets(STDIN)));
// Saatleri tam sayıya dönüştür
$hours = array_map('intval', $hours);
// İsimleri ve saatleri birleştiren ilişkisel dizi oluştur
$employees = array_combine($names, $hours);
// TODO: Kodunuzu aşağıya yazın
// 1. Minimum çalışma saatinde veya üzerinde çalışan personelleri tutmak için array_filter() kullanın
// 2. Filtrelenmiş personeller için fazla mesai ücretini hesaplamak üzere array_map() kullanın
// 3. Toplam fazla mesai ücretini hesaplamak için array_reduce() kullanın
// Sonuçları yazdır
// Her bir kalifiye personelin fazla mesai ücretini yazdır
// Toplam fazla mesai ücretini 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 İşleme