Redukowanie za pomocą 'array_reduce'
Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 43 z 68.
Funkcja array_reduce() działa inaczej niż array_map() i array_filter(). Zamiast zwracać nową tablicę, przetwarza wszystkie elementy tablicy, aby uzyskać pojedynczą wartość. Dzięki temu świetnie nadaje się do takich operacji jak obliczanie sum, znajdowanie wartości maksymalnych lub łączenie wszystkich elementów w jeden wynik.
Funkcja przyjmuje tablicę do przetworzenia i funkcję zwrotną, która określa sposób łączenia elementów, a także opcjonalny trzeci parametr: wartość początkową. Funkcja zwrotna otrzymuje dwa parametry: zgromadzony wynik (nazywany „akumulatorem”) i bieżący element tablicy.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Wynik: 15
?>W tym przykładzie funkcja rozpoczyna od wartości początkowej 0, a następnie wielokrotnie wywołuje addNumbers z bieżącą sumą i każdym elementem tablicy. Ten proces akumulacji trwa, aż wszystkie elementy zostaną przetworzone, pozostawiając końcową zredukowaną wartość.
Wyzwanie
ŁatwyOtrzymasz dwa dane wejściowe: listę liczb rozdzielonych przecinkami oraz typ operacji. Pierwsze dane wejściowe zawierają liczby jako ciąg znaków w formacie 5,10,15,20,25, a drugie dane wejściowe to pojedynczy znak wskazujący operację: S oznacza sumę, P iloczyn, a M maksimum.
Odczytaj oba dane wejściowe, zamień liczby rozdzielone przecinkami na tablicę liczb całkowitych, utwórz własną funkcję zwrotną wykonującą określoną operację, użyj array_reduce() wraz z funkcją zwrotną i odpowiednią wartością początkową, aby przetworzyć wszystkie liczby i uzyskać jeden wynik, a następnie wypisz końcowy wynik.
Szczegóły operacji:
S(suma): Dodaj do siebie wszystkie liczby (wartość początkowa: 0)P(iloczyn): Pomnóż wszystkie liczby przez siebie (wartość początkowa: 1)M(maksimum): Znajdź największą liczbę (wartość początkowa: pierwsza liczba w tablicy lub bardzo mała liczba)
Funkcja zwrotna powinna przyjmować dwa parametry: zgromadzony wynik (carry) i bieżący element tablicy (item), a następnie zwracać zaktualizowaną wartość zgromadzonego wyniku w zależności od typu operacji.
Format danych wejściowych:
- Pierwszy wiersz: liczby rozdzielone przecinkami (przykład:
5,10,15,20,25) - Drugi wiersz: typ operacji —
S,PlubM(przykład:S)
Oczekiwany wynik: Pojedyncza liczba reprezentująca wynik operacji reduce
Spróbuj swoich sił
<?php
// Odczytaj dane wejściowe
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Przekształć ciąg znaków rozdzielonych przecinkami w tablicę liczb całkowitych
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Napisz swój kod poniżej
// Utwórz funkcję zwrotną na podstawie typu operacji
// Użyj array_reduce() z funkcją zwrotną i odpowiednią wartością początkową
// Wyświetl wynik
echo $result;
?>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