[SOL] Esercizio n. 1 Pokémon (01_pokémon)
Spiegazione del codice: La squadra di Ash
Questo codice PHP mostra come gestire gli array (liste di dati) attraverso una storia divertente sui Pokémon di Ash. Vediamo insieme ogni parte!
Struttura HTML di base
Il codice inizia con la struttura HTML standard:
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>La squadra di Ash</title>
</head>
<body>
<h1>La squadra di Ash</h1>
1. Dati di partenza
$livelli = [45, 12, 38, 27, 50, 33, 19];
$nomi = ["Pikachu", "Charizard", "Bulbasaur", "Squirtle", "Snorlax"];
Vengono creati due array:
$livelli: contiene i livelli dei Pokémon (numeri)$nomi: contiene i nomi dei Pokémon (stringhe)
2. Visualizzazione degli array
Il codice mostra due modi per vedere il contenuto di un array:
var_dump(): mostra informazioni dettagliate (tipo di dato, dimensione)print_r(): mostra il contenuto in modo più semplice e leggibile
Entrambe le funzioni sono racchiuse in tag <pre> per mantenere la formattazione.
3. Aggiungere elementi (Catture)
$livelli[] = 22; // aggiunge 22 alla fine
array_push($livelli, 41); // aggiunge 41 alla fine
Due modi per aggiungere elementi alla fine di un array:
[]: sintassi più semplicearray_push(): funzione specifica
4. Rimuovere l'ultimo elemento (Fuga)
$scappato = array_pop($livelli);
array_pop() rimuove l'ultimo elemento dell'array e lo restituisce. Il valore rimosso viene salvato nella variabile $scappato.
5. Gestire il primo elemento (Centro Pokémon)
array_shift($livelli); // rimuove il primo elemento
array_unshift($livelli, 15); // aggiunge 15 all'inizio
array_shift(): rimuove il primo elemento e rinumera tutti gli indiciarray_unshift(): aggiunge un elemento all'inizio
6. Unire array (Sfida con Misty)
$livelliMisty = [30, 44, 21, 36, 28];
$arenaCombinata = array_merge($livelli, $livelliMisty);
array_merge() unisce due o più array creandone uno nuovo. L'ordine è importante: prima Ash, poi Misty.
7. Convertire tra array e stringhe
$stringaNomi = implode(" - ", $nomi); // array → stringa
$nomiRicostruiti = explode(" - ", $stringaNomi); // stringa → array
implode(): trasforma un array in una stringa usando un separatoreexplode(): fa l'operazione inversa, spezzando una stringa in un array
8. Statistiche e filtri
$somma = array_sum($arenaCombinata); // somma tutti i valori
function filtra_forti($livello) {
return $livello > 30;
}
$pokemonForti = array_filter($arenaCombinata, "filtra_forti");
array_sum(): calcola la somma di tutti i valori numericiarray_filter(): mantiene solo gli elementi che soddisfano una condizione (definita in una funzione)
Concetti chiave da ricordare
- Gli array in PHP sono molto flessibili e hanno molte funzioni utili
array_filter()mantiene gli indici originali (ecco perché nell'output finale mancano alcuni numeri)- Le funzioni
implode()edexplode()sono molto utili per convertire dati - PHP offre diverse funzioni per aggiungere/rimuovere elementi da inizio o fine array
Questo esempio mostra come gli array siano fondamentali nella programmazione per gestire collezioni di dati in modo efficiente!
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>La squadra di Ash</title>
</head>
<body>
<h1>La squadra di Ash</h1>
<?php
// ---------------------------------------------------------
// DATI DI PARTENZA
// ---------------------------------------------------------
$livelli = [45, 12, 38, 27, 50, 33, 19];
$nomi = ["Pikachu", "Charizard", "Bulbasaur", "Squirtle", "Snorlax"];
// ---------------------------------------------------------
// 1. VISUALIZZAZIONE
// ---------------------------------------------------------
// var_dump() mostra anche il tipo e la dimensione di ogni elemento.
echo "<b>1a. var_dump di \$livelli:</b>";
echo "<pre>";
var_dump($livelli);
echo "</pre>";
// print_r() mostra l'array in forma più semplice e leggibile.
echo "<b>1b. print_r di \$livelli:</b>";
echo "<pre>";
print_r($livelli);
echo "</pre>";
// ---------------------------------------------------------
// 2. CATTURE
// ---------------------------------------------------------
$livelli[] = 22; // aggiunge in fondo con []
array_push($livelli, 41); // aggiunge in fondo con array_push()
echo "<b>2. Array dopo le catture (22 e 41):</b>";
echo "<pre>";
print_r($livelli);
echo "</pre>";
// ---------------------------------------------------------
// 3. FUGA
// ---------------------------------------------------------
// array_pop() toglie l'ultimo elemento e lo restituisce:
// lo salviamo nella variabile $scappato.
$scappato = array_pop($livelli);
echo "<b>3a. Livello del Pokémon scappato:</b> " . $scappato . "<br><br>";
echo "<b>3b. Array dopo la fuga:</b>";
echo "<pre>";
print_r($livelli);
echo "</pre>";
// ---------------------------------------------------------
// 4. CENTRO POKÉMON
// ---------------------------------------------------------
// array_shift() toglie il primo elemento.
// Gli indici vengono rinumerati: il vecchio indice 1 diventa 0, ecc.
array_shift($livelli);
echo "<b>4a. Array dopo array_shift (indici rinumerati):</b>";
echo "<pre>";
print_r($livelli);
echo "</pre>";
// array_unshift() inserisce un elemento all'inizio.
array_unshift($livelli, 15);
echo "<b>4b. Array dopo array_unshift (nuovo Pokémon di livello 15):</b>";
echo "<pre>";
print_r($livelli);
echo "</pre>";
// ---------------------------------------------------------
// 5. SFIDA CON MISTY
// ---------------------------------------------------------
$livelliMisty = [30, 44, 21, 36, 28];
// array_merge() unisce gli array nell'ordine indicato:
// prima Ash, poi Misty.
$arenaCombinata = array_merge($livelli, $livelliMisty);
echo "<b>5. Arena combinata (Ash + Misty):</b>";
echo "<pre>";
print_r($arenaCombinata);
echo "</pre>";
// ---------------------------------------------------------
// 6. IL REGISTRO DEI NOMI
// ---------------------------------------------------------
// implode() trasforma l'array in una stringa, con il separatore scelto.
$stringaNomi = implode(" - ", $nomi);
echo "<b>6a. Nomi come stringa:</b> " . $stringaNomi . "<br><br>";
// explode() fa il contrario: spezza la stringa in un array
// usando lo stesso separatore.
$nomiRicostruiti = explode(" - ", $stringaNomi);
echo "<b>6b. Array ricostruito con explode:</b>";
echo "<pre>";
print_r($nomiRicostruiti);
echo "</pre>";
// ---------------------------------------------------------
// 7. STATISTICHE DI SQUADRA
// ---------------------------------------------------------
// array_sum() somma tutti i valori dell'array.
$somma = array_sum($arenaCombinata);
echo "<b>7a. Somma dei livelli:</b> Il potere totale dell'arena è di: " . $somma . " livelli<br><br>";
// Funzione di callback: restituisce true se il livello è maggiore di 30.
function filtra_forti($livello)
{
return $livello > 30;
}
// array_filter() tiene solo gli elementi per cui la funzione restituisce true.
$pokemonForti = array_filter($arenaCombinata, "filtra_forti");
echo "<b>7b. Pokémon forti (livello > 30):</b>";
echo "<pre>";
print_r($pokemonForti);
echo "</pre>";
// Attenzione: array_filter() MANTIENE gli indici originali,
// quindi nell'output mancano dei numeri (es. 0, 1, 3...).
echo "<i>Nota: gli indici originali sono stati mantenuti!</i>";
?>
</body>
</html>