[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ù semplice
  • array_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 indici
  • array_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 separatore
  • explode(): 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 numerici
  • array_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() ed explode() 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>