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.
Sfida
FacileRiceverai 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,PoppureM(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;
?>Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Funzioni avanzate
Funzioni anonimeClosure e 'use'Funzioni frecciaFunzioni callbackUso di 'call_user_func'Funzioni variabiliPassaggio per riferimentoFunzioni ricorsiveRiepilogo: carrellata di funzioni4Array multidimensionali
Creare un array 2DAccedere agli elementi di un array 2DModificare gli elementi di un array 2DIterare con cicli annidatiArray associativi 2DRipasso: esercizio con una griglia semplice2Manipolazioni avanzate degli array
Aggiungere con 'array_push'Rimuovere con 'array_pop'Aggiungere con 'array_unshift'Rimuovere con 'array_shift'Unire array indicizzatiUnire array associativiEstrarre con 'array_slice'Valori con 'in_array'Chiavi con 'array_search'Riepilogo: esercizio playlist3Ordinare gli array
Ordina gli array indicizzati in ordine crescenteOrdina gli array indicizzati in ordine decrescenteOrdina gli array associativi per valoreOrdina gli array associativi per chiaveOrdinamento naturaleOrdinamento personalizzato con 'usort'Ripasso: ordinamento della classifica6Funzioni di ordine superiore sugli array
Trasformare con 'array_map''array_map' con una funzione personalizzataFiltrare con 'array_filter''array_filter' con una funzione personalizzataRidurre con 'array_reduce'Iterare con 'array_walk'Riepilogo: elaborazione dei datiEsercitati da solo: Compilatore PHP online