Menu
CoddyTech

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 calcolare totali, trovare i valori massimi o combinare tutti gli elementi in un unico risultato.

La funzione accetta l'array da elaborare e una funzione callback che definisce come combinare gli elementi, oltre a un terzo parametro facoltativo: il valore iniziale. La funzione callback riceve due parametri: il risultato accumulato (chiamato «accumulatore») 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 callback personalizzata che esegua l'operazione specificata, usa array_reduce() con la tua funzione 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 oppure un numero molto piccolo)

La tua funzione 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


// Mostra 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