'array_reduce' ile İndirgeme
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 43 / 68.
array_reduce() fonksiyonu, array_map() ve array_filter() fonksiyonlarından farklı bir yaklaşım benimser. Yeni bir dizi döndürmek yerine, bir dizideki tüm öğeleri işleyerek tek bir değer üretir. Bu, onu toplamları hesaplamak, maksimumları bulmak veya tüm öğeleri tek bir sonuçta birleştirmek gibi işlemler için mükemmel kılar.
İşlev üç parametre gerektirir: işlenecek dizi, öğelerin nasıl birleştirileceğini tanımlayan bir geri çağırma işlevi ve isteğe bağlı bir başlangıç değeri. Geri çağırma işlevi iki parametre alır: birikmiş sonuç ("carry" olarak adlandırılır) ve geçerli dizi öğesi.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Sonuç: 15
?>Bu örnekte, fonksiyon 0 başlangıç değeriyle başlar, ardından her bir dizi öğesi ve mevcut toplam ile addNumbers fonksiyonunu tekrar tekrar çağırır. Bu biriktirme süreci tüm öğeler işlenene kadar devam eder ve size nihai indirgenmiş değeri bırakır.
Görev
Kolayİki girdi alacaksınız: virgülle ayrılmış bir sayı listesi ve bir işlem türü. İlk girdi, 5,10,15,20,25 biçiminde bir dize olarak sayıları içerir ve ikinci girdi, işlemi belirten tek bir karakterdir: toplam için S, çarpım için P veya maksimum için M.
Her iki girdiyi okuyun, virgülle ayrılmış sayıları bir tamsayı dizisine dönüştürün, belirtilen işlemi gerçekleştiren özel bir geri çağırma işlevi oluşturun, tüm sayıları tek bir sonuçta işlemek için geri çağırma işleviniz ve uygun bir başlangıç değeriyle array_reduce() kullanın ve son sonucu yazdırın.
İşlem ayrıntıları:
S(Toplam): Tüm sayıları birbirine ekleyin (başlangıç değeri: 0)P(Çarpım): Tüm sayıları birbiriyle çarpın (başlangıç değeri: 1)M(Maksimum): En büyük sayıyı bulun (başlangıç değeri: dizideki ilk sayı veya çok küçük bir sayı)
Geri çağırma işleviniz iki parametre kabul etmelidir: biriktirilmiş sonuç (carry) ve geçerli dizi öğesi (item); ardından işlem türüne göre güncellenmiş biriktirilmiş değeri döndürmelidir.
Girdi biçimi:
- İlk satır: Virgülle ayrılmış sayılar (örnek:
5,10,15,20,25) - İkinci satır: İşlem türü -
S,PveyaM(örnek:S)
Beklenen çıktı: Reduce işleminin sonucunu temsil eden tek bir sayı
Kendin dene
<?php
// Girdiyi oku
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Virgülle ayrılmış dizeyi tam sayı dizisine dönüştür
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Kodunuzu aşağıya yazın
// İşlem türüne göre bir callback fonksiyonu oluşturun
// Callback fonksiyonunuz ve uygun başlangıç değeri ile array_reduce() kullanın
// Sonucu yazdır
echo $result;
?>Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 İşlemeKendi başına pratik yap: Online PHP derleyicisi