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.
Wyzwanie
ŁatwyOtrzymasz 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";
}
?>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
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wyników6Funkcje wyższego rzędu dla tablic
Przekształcanie za pomocą 'array_map''array_map' z własną funkcjąFiltrowanie za pomocą 'array_filter''array_filter' z własną funkcjąRedukowanie za pomocą 'array_reduce'Przechodzenie po elementach za pomocą 'array_walk'Podsumowanie: przetwarzanie danychPoćwicz samodzielnie: Kompilator PHP online