Menu
Coddy logo textTech

Ridurre con 'array_reduce'

Fa parte della sezione Logica e flusso del percorso PHP di Coddy. Lezione 43 di 68.

La funzione array_reduce() adotta un approccio diverso da array_map() e array_filter(). Invece di restituire un nuovo array, elabora tutti gli elementi di un array per produrre un singolo valore. Questo la rende perfetta per operazioni come il calcolo dei totali, la ricerca dei valori massimi o la combinazione di tutti gli elementi in un unico risultato.

La funzione richiede tre parametri: l’array da elaborare, una funzione di callback che definisce come combinare gli elementi e un valore iniziale facoltativo. La funzione di callback riceve due parametri: il risultato accumulato (chiamato «carry») e l’elemento corrente dell’array.

<?php
function addNumbers($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Risultato: 15
?>

In questo esempio, la funzione inizia con un valore iniziale di 0, poi chiama ripetutamente addNumbers con il totale progressivo e ogni elemento dell'array. Questo processo di accumulo continua finché tutti gli elementi non sono stati elaborati, lasciandoti il valore ridotto finale.

challenge icon

Sfida

Facile

Riceverai due input: un elenco di numeri separati da virgole e un tipo di operazione. Il primo input contiene numeri come stringa nel formato 5,10,15,20,25, mentre il secondo input è un singolo carattere che indica l’operazione: S per la somma, P per il prodotto oppure M per il massimo.

Leggi entrambi gli input, converti i numeri separati da virgole in un array di interi, crea una funzione di callback personalizzata che esegua l’operazione specificata, usa array_reduce() con la tua funzione di callback e un valore iniziale appropriato per elaborare tutti i numeri ottenendo un unico risultato, quindi stampa il risultato finale.

Dettagli delle operazioni:

  • S (Somma): somma tutti i numeri (valore iniziale: 0)
  • P (Prodotto): moltiplica tutti i numeri (valore iniziale: 1)
  • M (Massimo): trova il numero più grande (valore iniziale: il primo numero dell’array o un numero molto piccolo)

La tua funzione di callback deve accettare due parametri: il risultato accumulato (carry) e l’elemento corrente dell’array (item), quindi restituire il valore accumulato aggiornato in base al tipo di operazione.

Formato dell’input:

  • Prima riga: numeri separati da virgole (esempio: 5,10,15,20,25)
  • Seconda riga: tipo di operazione: S, P oppure M (esempio: S)

Output previsto: un singolo numero che rappresenta il risultato dell’operazione di riduzione

Provalo tu

<?php
// Leggi l'input
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// Converti la stringa separata da virgole in un array di numeri interi
$numbers = array_map('intval', explode(',', $numbers_input));

// TODO: Scrivi il tuo codice qui sotto
// Crea una funzione di callback in base al tipo di operazione
// Usa array_reduce() con la tua funzione di callback e un valore iniziale appropriato


// Stampa il risultato
echo $result;
?>
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore PHP online