Menu
CoddyTech

'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.

challenge icon

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, P veya M (ö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;
?>
quiz iconKendini test et

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

Kendi başına pratik yap: Online PHP derleyicisi