'array_walk' ile Gezinme
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 44 / 68.
array_walk() fonksiyonu, dizileri işlemeye yönelik array_map() fonksiyonuna kıyasla farklı bir yaklaşım sunar. array_map() dönüştürülmüş değerlerle yeni bir dizi oluştururken, array_walk() her bir öğeye yerinde bir geri çağırma fonksiyonu uygulayarak orijinal diziyi doğrudan değiştirir.
Bu fonksiyon, mevcut diziyi bir kopya oluşturmadan değiştirmek istediğinizde özellikle yararlıdır. Sağladığınız geri çağırma (callback) fonksiyonu, her dizi öğesini referans yoluyla alır ve orijinal değerleri doğrudan değiştirmenize olanak tanır.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items artık şudur: ["Item: apple", "Item: banana", "Item: orange"]
?>Geri çağırma (callback) fonksiyonunun, dizi öğesini referans yoluyla almak için &$value kullandığına dikkat edin. Bu, fonksiyonun orijinal dizi öğesini doğrudan değiştirmesine olanak tanır. İkinci parametre olan $key, mevcut öğenin anahtarına erişim sağlar; ancak basit dönüşümler için her zaman gerekli değildir.
array_walk() ayrıca isteğe bağlı bir üçüncü bağımsız değişken kabul eder — bu, geri çağırma işlevinize (callback) üçüncü bir parametre olarak doğrudan iletilen ek veridir. Bu, dönüşümünüz dizinin dışında tanımlanan bir değere bağlı olduğunda kullanışlıdır.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items artık şöyledir: ["Item: apple", "Item: banana", "Item: orange"]
?>Burada,
"Item: " dizesi array_walk() işlevine üçüncü bağımsız değişken olarak iletilir ve geri çağırma işlevi içinde $prefix olarak alınır. Bu, aynı geri çağırma işlevini farklı ek değerlerle yeniden kullanmanıza olanak tanı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ış ürün adlarından oluşan bir liste ve bir kategori öneki. İlk girdi, laptop,mouse,keyboard,monitor formatında bir dize olarak ürün adlarını içerir ve ikinci girdi bir kategori öneki metnidir (örnek: Electronics).
Her iki girdiyi de okuyun, virgülle ayrılmış ürün adlarını bir diziye dönüştürün, her ürün adına "Category: ProductName" formatında kategori önekini ekleyen bir geri çağırma (callback) fonksiyonu oluşturun, orijinal diziyi doğrudan değiştirmek için geri çağırma fonksiyonunuzla birlikte array_walk() kullanın ve değiştirilen her ürün adını ayrı bir satıra yazdırın.
Geri çağırma fonksiyonunuz, dizi öğelerini referans yoluyla değiştirmek için &$value parametresini kullanmalıdır. Fonksiyon, kategori önekini bir iki nokta üst üste ve boşlukla, ardından ürün adıyla birleştirmelidir.
Giriş formatı:
- İlk satır: Virgülle ayrılmış ürün adları (örnek:
laptop,mouse,keyboard,monitor) - İkinci satır: Kategori öneki metni (örnek:
Electronics)
Beklenen çıktı: Değiştirilen her ürün adının Category: ProductName formatında ayrı bir satıra yazdırılması
Kopya kağıdı
array_walk() fonksiyonu, yeni bir dizi oluşturan array_map() fonksiyonunun aksine, her bir öğeye yerinde bir geri çağırma fonksiyonu uygulayarak orijinal diziyi doğrudan değiştirir.
Geri çağırma fonksiyonu, her bir dizi öğesini &$value kullanarak referans yoluyla alır ve orijinal değerlerin doğrudan değiştirilmesine olanak tanır. İkinci parametre olan $key, mevcut öğenin anahtarına erişim sağlar.
array_walk() ayrıca isteğe bağlı bir üçüncü argümanı da kabul eder — bu, geri çağırma fonksiyonuna üçüncü bir parametre olarak aktarılan ekstra veridir. Bu, geri çağırma fonksiyonunuzun her bir öğeyi işlemek için ek bilgiye ihtiyaç duyduğu durumlarda kullanışlıdır.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items artık şöyledir: ["Item: apple", "Item: banana", "Item: orange"]
// İsteğe bağlı üçüncü argümanı (ekstra veri) kullanma:
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits artık şöyledir: ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>Kendin dene
<?php
// Virgülle ayrılmış ürün adlarını oku
$products_input = trim(fgets(STDIN));
// Kategori önekini oku
$category = trim(fgets(STDIN));
// Virgülle ayrılmış dizeyi bir diziye dönüştür
$products = explode(',', $products_input);
// YAPILACAK: Kodunuzu aşağıya yazın
// Her ürün adına kategori önekini ekleyerek değiştiren bir geri çağırma (callback) fonksiyonu oluşturun
// Diziyi değiştirmek için geri çağırma fonksiyonunuzla birlikte array_walk() kullanın
// Değiştirilen her ürün adını ayrı bir satıra yazdırın
foreach ($products as $product) {
echo $product . "\n";
}
?>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