Menu
Coddy logo textTech

'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 şöyledir: ["Item: apple", "Item: banana", "Item: orange"]
?>

Geri çağırma (callback) fonksiyonunun dizi öğesini referans yoluyla almak için &$value ifadesini nasıl 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, geri çağırma fonksiyonunuza doğrudan ekstra veri aktarmanıza olanak tanıyan isteğe bağlı bir üçüncü argümanı da destekler. Bu, dönüşümünüz dizinin dışında tanımlanan bir değere — bir önek, sonek veya başka herhangi bir dinamik girdi gibi — bağlı olduğunda kullanışlıdır.

array_walk() fonksiyonuna üçüncü bir argüman ilettiğinizde, geri çağırma (callback) fonksiyonunuz bunu üçüncü bir 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 artık şöyledir: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>

Burada, $prefix, array_walk() fonksiyonuna üçüncü argüman olarak aktarılır ve geri çağırma (callback) fonksiyonu bunu $category olarak alır. Bu sayede, aynı geri çağırma fonksiyonunu, içine herhangi bir değer gömmeden (hardcoding) farklı öneklerle tekrar kullanabilirsiniz.

challenge icon

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 kategori önekini "Category: ProductName" formatında 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.

Girdi 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ı

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ı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";
}
?>
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