'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.
Fonksiyon üç parametre gerektirir: işlenecek dizi, elemanların nasıl birleştirileceğini tanımlayan bir geri çağırma (callback) fonksiyonu ve isteğe bağlı bir başlangıç değeri. Geri çağırma fonksiyonu iki parametre alır: biriktirilmiş sonuç ("carry" olarak adlandırılır) ve mevcut dizi elemanı.
<?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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 formatında 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 de okuyun, virgülle ayrılmış sayıları bir tam sayı dizisine dönüştürün, belirtilen işlemi gerçekleştiren özel bir geri çağırma (callback) fonksiyonu oluşturun, tüm sayıları tek bir sonuçta işlemek için geri çağırma fonksiyonunuzla ve uygun bir başlangıç değeriyle birlikte array_reduce() kullanın ve nihai sonucu yazdırın.
İşlem detayları:
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 fonksiyonunuz iki parametre kabul etmelidir: birikmiş sonuç (carry) ve mevcut dizi öğesi (item), ardından işlem türüne göre güncellenmiş birikmiş değeri döndürmelidir.
Girdi formatı:
- İ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ı: İndirgeme (reduce) işleminin sonucunu temsil eden tek bir sayı
Kopya kağıdı
array_reduce() fonksiyonu, bir dizideki tüm öğeleri işleyerek tek bir değer üretir; toplamları hesaplamak veya öğeleri birleştirmek için mükemmeldir.
Üç parametre gerektirir: işlenecek dizi, bir geri çağırma (callback) fonksiyonu ve isteğe bağlı bir başlangıç değeri. Geri çağırma fonksiyonu, birikmiş sonucu (carry) ve mevcut dizi öğesini alır.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Sonuç: 15
?>Sonuçları 2 ondalık basamağa kadar biçimlendirmek için number_format($total, 2) kullanın.
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 geri çağırma (callback) fonksiyonu oluşturun
// Geri çağırma 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 İşleme