'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() işlevi, array_map() ile karşılaştırıldığında dizileri işlemek için farklı bir yaklaşım sunar. array_map() dönüştürülmüş değerlerle yeni bir dizi oluştururken, array_walk() her öğeye yerinde bir geri çağırma işlevi uygulayarak özgün diziyi doğrudan değiştirir.
Bu işlev, bir kopya oluşturmadan mevcut diziyi değiştirmek istediğinizde özellikle kullanışlıdır. Sağladığınız geri çağırma işlevi her dizi öğesini referansla alır ve böylece özgün 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: ["Item: apple", "Item: banana", "Item: orange"]
?>Geri çağırma işlevinin dizi öğesini referans yoluyla almak için &$value kullandığına dikkat et. Bu, işlevin özgün dizi öğesini doğrudan değiştirmesine olanak tanır. İkinci parametre olan $key, geçerli öğenin anahtarına erişim sağlar; ancak basit dönüşümler için her zaman gerekli değildir.
array_walk() ayrıca, geri çağırma işlevinize doğrudan ek veri aktarmanızı sağlayan isteğe bağlı bir üçüncü bağımsız değişkeni de destekler. Bu, dönüşümünüz dizi dışında tanımlanan bir değere (örneğin bir ön eke, son eke veya başka herhangi bir dinamik girdiye) bağlı olduğunda kullanışlıdır.
array_walk() işlevine üçüncü bir bağımsız değişken ilettiğinizde, geri çağırma işleviniz bunu üçüncü parametre olarak alır:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Burada $prefix, array_walk() işlevine üçüncü bağımsız değişken olarak aktarılır ve geri çağırma işlevi bunu $category olarak alır. Bu şekilde, içindeki herhangi bir değeri sabit kodlamadan aynı geri çağırma işlevini farklı ön eklerle yeniden kullanabilirsiniz.
Görev
Kolayİki girdi alacaksınız: virgülle ayrılmış ürün adları listesi ve bir kategori ön eki. İlk girdi, laptop,mouse,keyboard,monitor biçiminde bir dize olarak ürün adlarını içerir ve ikinci girdi bir kategori ön eki metnidir (örnek: Electronics).
Her iki girdiyi okuyun, virgülle ayrılmış ürün adlarını bir diziye dönüştürün, "Category: ProductName" biçiminde her ürün adına kategori ön ekini ekleyen bir geri çağırma işlevi oluşturun, özgün diziyi doğrudan değiştirmek için geri çağırma işlevinizle birlikte array_walk() kullanın ve değiştirilen her ürün adını ayrı bir satıra yazdırın.
Geri çağırma işleviniz, dizi öğelerini referans yoluyla değiştirmek için &$value parametresini kullanmalıdır. İşlev, kategori ön ekini iki nokta ve boşlukla, ardından ürün adıyla birleştirmelidir.
Girdi biçimi:
- İlk satır: Virgülle ayrılmış ürün adları (örnek:
laptop,mouse,keyboard,monitor) - İkinci satır: Kategori ön eki metni (örnek:
Electronics)
Beklenen çıktı: Değiştirilmiş her ürün adı, Category: ProductName biçiminde ayrı bir satıra yazdırılır.
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);
// TODO: Kodunuzu aşağıya yazın
// Her ürün adını kategori önekini ekleyerek değiştiren bir geri çağırma fonksiyonu oluştur
// Diziyi değiştirmek için geri çağırma fonksiyonunuzla array_walk() kullanın
// Her değiştirilmiş ürün adını ayrı bir satıra yazdır
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 İşlemeKendi başına pratik yap: Online PHP derleyicisi