Menu
Coddy logo textTech

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 wymaga trzech parametrów: tablicy do przetworzenia, funkcji zwrotnej określającej sposób łączenia elementów oraz opcjonalnej wartości początkowej. Funkcja zwrotna otrzymuje dwa parametry: zgromadzony wynik (nazywany „carry”) oraz 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ść.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa dane wejściowe: listę liczb oddzielonych przecinkami oraz typ operacji. Pierwsze dane wejściowe zawierają liczby w postaci ciągu znaków w formacie 5,10,15,20,25, a drugie to pojedynczy znak określający operację: S oznacza sumę, P iloczyn, a M maksimum.

Wczytaj oba dane wejściowe, zamień liczby oddzielone 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 wynik końcowy.

Szczegóły operacji:

  • S (suma): Dodaj do siebie wszystkie liczby (wartość początkowa: 0)
  • P (iloczyn): Pomnóż przez siebie wszystkie liczby (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) oraz bieżący element tablicy (item), a następnie zwracać zaktualizowaną wartość na podstawie typu operacji.

Format danych wejściowych:

  • Pierwszy wiersz: liczby oddzielone przecinkami (na przykład: 5,10,15,20,25)
  • Drugi wiersz: typ operacji — S, P lub M (na przykład: S)

Oczekiwany wynik: Jedna liczba reprezentująca wynik operacji redukcji

Spróbuj swoich sił

<?php
// Odczytaj dane wejściowe
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// Przekształć ciąg znaków rozdzielony 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() ze swoją funkcją zwrotną i odpowiednią wartością początkową


// Wyświetl wynik
echo $result;
?>
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