Menu
Coddy logo textTech

Przechodzenie po elementach za pomocą 'array_walk'

Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 44 z 68.

Funkcja array_walk() oferuje inne podejście do przetwarzania tablic niż array_map(). Podczas gdy array_map() tworzy nową tablicę z przekształconymi wartościami, array_walk() modyfikuje bezpośrednio oryginalną tablicę, stosując funkcję zwrotną do każdego elementu w miejscu.

Ta funkcja jest szczególnie przydatna, gdy chcesz zmienić istniejącą tablicę bez tworzenia kopii. Podana przez Ciebie funkcja zwrotna otrzymuje każdy element tablicy przez referencję, co pozwala modyfikować bezpośrednio oryginalne wartości.

<?php
function addPrefix(&$value, $key) {
    $value = "Item: " . $value;
}

$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items ma teraz wartość: ["Item: apple", "Item: banana", "Item: orange"]
?>

Zwróć uwagę, że funkcja zwrotna używa &$value, aby otrzymać element tablicy przez referencję. Dzięki temu funkcja może bezpośrednio modyfikować oryginalny element tablicy. Drugi parametr $key zapewnia dostęp do klucza bieżącego elementu, choć nie zawsze jest potrzebny w przypadku prostych przekształceń.

array_walk() obsługuje również opcjonalny trzeci argument, który pozwala przekazać dodatkowe dane bezpośrednio do funkcji zwrotnej. Jest to przydatne, gdy przekształcenie zależy od wartości zdefiniowanej poza tablicą, takiej jak prefiks, sufiks lub inne dynamiczne dane wejściowe.

Gdy przekażesz trzeci argument do array_walk(), funkcja wywołania zwrotnego otrzyma go jako trzeci parametr:

<?php
function addCategory(&$value, $key, $category) {
    $value = $category . ": " . $value;
}

$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products to teraz: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>

Tutaj $prefix jest przekazywane jako trzeci argument do array_walk(), a funkcja zwrotna otrzymuje je jako $category. Dzięki temu możesz ponownie używać tej samej funkcji zwrotnej z różnymi prefiksami, bez wpisywania na stałe żadnych wartości w jej treści.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wejścia: rozdzieloną przecinkami listę nazw produktów oraz prefiks kategorii. Pierwsze wejście zawiera nazwy produktów jako ciąg w formacie laptop,mouse,keyboard,monitor, a drugie wejście to tekst prefiksu kategorii (na przykład: Electronics).

Odczytaj oba wejścia, przekształć rozdzielone przecinkami nazwy produktów w tablicę, utwórz funkcję callback, która dodaje prefiks kategorii do każdej nazwy produktu w formacie "Category: ProductName", użyj array_walk() wraz ze swoją funkcją callback, aby zmodyfikować bezpośrednio oryginalną tablicę, i wypisz każdą zmodyfikowaną nazwę produktu w osobnym wierszu.

Twoja funkcja callback musi używać parametru &$value, aby modyfikować elementy tablicy przez referencję. Funkcja powinna połączyć prefiks kategorii, dwukropek i spację, a następnie nazwę produktu.

Format wejścia:

  • Pierwszy wiersz: rozdzielone przecinkami nazwy produktów (na przykład: laptop,mouse,keyboard,monitor)
  • Drugi wiersz: tekst prefiksu kategorii (na przykład: Electronics)

Oczekiwany wynik: Każda zmodyfikowana nazwa produktu wypisana w osobnym wierszu w formacie Category: ProductName

Spróbuj swoich sił

<?php
// Wczytaj nazwy produktów oddzielone przecinkami
$products_input = trim(fgets(STDIN));

// Wczytaj prefiks kategorii
$category = trim(fgets(STDIN));

// Przekształć ciąg znaków z wartościami oddzielonymi przecinkami w tablicę
$products = explode(',', $products_input);

// TODO: Napisz swój kod poniżej
// Utwórz funkcję zwrotną, która zmodyfikuje każdą nazwę produktu, dodając do niej prefiks kategorii
// Użyj array_walk() ze swoją funkcją zwrotną, aby zmodyfikować tablicę


// Wypisz każdą zmodyfikowaną nazwę produktu w osobnym wierszu
foreach ($products as $product) {
    echo $product . "\n";
}
?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator PHP online