'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() işlevi, array_map() ve array_filter() işlevlerinden farklı bir yaklaşım benimser. Yeni bir dizi döndürmek yerine, tek bir değer üretmek için bir dizideki tüm öğeleri işler. Bu özelliği, toplamları hesaplama, en büyük değerleri bulma veya tüm öğeleri tek bir sonuçta birleştirme gibi işlemler için ideal kılar.
Fonksiyon, işlenecek diziyi ve öğelerin nasıl birleştirileceğini tanımlayan bir geri çağırma fonksiyonunu, ayrıca isteğe bağlı üçüncü bir parametreyi alır: başlangıç değeri. Geri çağırma fonksiyonu iki parametre alır: biriktirilen sonuç ("taşıma" 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 işlev, başlangıç değeri olarak 0 ile başlar, ardından biriken toplamı ve dizinin her bir öğesini kullanarak addNumbers işlevini tekrar tekrar çağırır. Bu biriktirme işlemi, tüm öğeler işlenene kadar devam eder ve geriye son indirgenmiş değer kalır.
Görev
Kolayİki girdi alacaksın: virgülle ayrılmış sayılardan oluşan bir liste ve bir işlem türü. İlk girdi, 5,10,15,20,25 biçiminde bir dize olarak sayıları içerir; ikinci girdi ise işlemi belirten tek bir karakterdir: toplam için S, çarpım için P veya en büyük değer için M.
Her iki girdiyi de oku, virgülle ayrılmış sayıları bir tamsayı dizisine dönüştür, belirtilen işlemi gerçekleştiren özel bir geri çağırım işlevi oluştur, tüm sayıları tek bir sonuçta işlemek için geri çağırım işlevinle ve uygun bir başlangıç değeriyle array_reduce() kullan ve son sonucu yazdır.
İşlem ayrıntıları:
S(Toplam): Tüm sayıları topla (başlangıç değeri: 0)P(Çarpım): Tüm sayıları çarp (başlangıç değeri: 1)M(En büyük): En büyük sayıyı bul (başlangıç değeri: dizideki ilk sayı veya çok küçük bir sayı)
Geri çağırım işlevin iki parametre kabul etmeli: birikmiş sonuç (carry) ve dizinin mevcut öğesi (item); ardından işlem türüne göre güncellenmiş birikmiş 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ış dizgeyi tam sayı dizisine dönüştür
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Kodunu aşağıya yaz
// İşlem türüne göre bir geri çağırma fonksiyonu oluştur
// Geri çağırma fonksiyonun ve uygun bir başlangıç değeriyle array_reduce() kullan
// 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