Array in PHP: operazioni fondamentali e manipolazione dati


Guida agli Array in PHP

Questo codice PHP mostra le principali operazioni che si possono fare con gli array, una delle strutture dati più importanti in programmazione. Analizziamo ogni sezione:

1. Array Indicizzato - Creazione e Stampa

$voti = [8,4,7.5,3,2,9,8.5];

Un array indicizzato è una lista di valori identificati da numeri (indici) che partono da 0. Nel nostro esempio:

  • $voti[0] = 8
  • $voti[1] = 4
  • $voti[2] = 7.5
  • e così via...

Funzioni per visualizzare gli array:

  • var_dump(): mostra informazioni dettagliate (tipo di dato, dimensione, valore)
  • print_r(): versione più leggibile, mostra solo chiavi e valori

2. Aggiungere e Rimuovere Elementi

Aggiungere elementi:

  • $voti[] = 9.5; - aggiunge un elemento alla fine
  • array_push($voti, 8); - stesso risultato del comando precedente
  • array_unshift($voti, 5.5); - aggiunge un elemento all'inizio

Rimuovere elementi:

  • array_pop($voti) - rimuove l'ultimo elemento e lo restituisce
  • array_shift($voti) - rimuove il primo elemento e "scala" tutti gli indici

3. Unire Array

$array_risultante = array_merge($punteggiClasse5B, $punteggiClasse5D);

La funzione array_merge() unisce due o più array creandone uno nuovo che contiene tutti gli elementi in sequenza.

4. Conversioni Array ↔ Stringa

Da array a stringa:

$strNomi = implode(",", $nomi);

implode() trasforma un array in una stringa, separando gli elementi con il carattere specificato.

Da stringa ad array:

$arrayNomi = explode(",", $strNomi);

explode() fa l'operazione inversa: spezza una stringa in un array usando un separatore.

5. Operazioni Matematiche e Filtri

Somma degli elementi:

$somma = array_sum($spese_condominiali);

Filtrare elementi:

function filtra_condominio($importo){
    return $importo > 450;
}
$spese_filtrate = array_filter($spese_condominiali, 'filtra_condominio');

array_filter() mantiene solo gli elementi per cui la funzione di filtro restituisce true.

6. Array Associativi e Multidimensionali

$libro = [
    "isbn" => "800763816625",
    "titolo" => "Corso di PHP",
    "editore_riferimento" => [
        "nome" => "Mario",
        "cognome" => "Rossi"
    ]
];

Un array associativo usa stringhe come chiavi invece di numeri. Si accede ai valori così:

  • $libro["isbn"] per valori semplici
  • $libro['editore_riferimento']['nome'] per array annidati

7. Ciclo foreach per Array Associativi

foreach ($libro2 as $key => $value) {
    echo "$key: $value";
}

Il ciclo foreach è perfetto per scorrere array associativi, permettendo di accedere sia alla chiave che al valore.

8. Estrarre Chiavi e Valori

  • array_keys($array): restituisce un array con tutte le chiavi
  • array_values($array): restituisce un array con tutti i valori (reindicizzato da 0)

Concetti Chiave da Ricordare

  • Gli array in PHP sono molto flessibili e possono contenere diversi tipi di dati
  • Gli indici degli array indicizzati partono sempre da 0
  • Gli array associativi sono utili per rappresentare dati strutturati
  • PHP offre molte funzioni predefinite per manipolare gli array
  • Il ciclo foreach è lo strumento principale per scorrere gli array

Questo codice rappresenta una panoramica completa delle operazioni fondamentali sugli array in PHP, essenziali per qualsiasi programmatore web.


<?php

    // ============================================================
    // 1. ARRAY INDICIZZATO: creazione e stampa
    // ============================================================

    // Array indicizzato (chiavi numeriche 0,1,2...) con dei voti
    $voti = [8,4,7.5,3,2,9,8.5];

    // var_dump mostra tipo di dato, dimensione e valore di ogni elemento
    echo "<b>1a) Array \$voti stampato con var_dump (mostra anche tipi e dimensioni)</b><br>";
    var_dump($voti);

    // print_r mostra una versione più leggibile (solo chiavi e valori)
    echo "<br><b>1b) Array \$voti stampato con print_r (versione più leggibile)</b><br>";
    print_r($voti);

    // ============================================================
    // 2. AGGIUNGERE E RIMUOVERE ELEMENTI
    // ============================================================

    $voti[] = 9.5;              // aggiunge 9.5 in coda all'array
    array_push($voti, 8);       // comando equivalente a quello di sopra: aggiunge 8 in coda

    echo "<br><b>2a) Array dopo l'aggiunta in coda di 9.5 (con []) e di 8 (con array_push)</b><br>";
    print_r($voti);

    // array_pop rimuove l'ultimo elemento e lo restituisce
    $valore_rimosso = array_pop($voti);

    echo "<br><b>2b) Array dopo array_pop (rimosso l'ultimo elemento)</b><br>";
    print_r($voti);

    echo "<br><b>2c) Valore rimosso da array_pop (stampato con echo):</b> ";
    echo $valore_rimosso;
    echo "<br><b>2d) Valore rimosso da array_pop (stampato con print_r):</b> ";
    print_r($valore_rimosso);

    // array_shift rimuove il primo elemento e "scala" gli indici
    $valore_as = array_shift($voti);
    echo "<br><br><b>2e) Array dopo array_shift (rimosso il primo elemento)</b><br>";
    print_r($voti);

    // array_unshift inserisce uno o più elementi all'inizio dell'array
    array_unshift($voti, 5.5);
    echo "<br><b>2f) Array dopo array_unshift (aggiunto 5.5 all'inizio)</b><br>";
    print_r($voti);

    // ============================================================
    // 3. UNIRE DUE ARRAY
    // ============================================================

    // Punteggi delle due classi
    $punteggiClasse5B = [80,76,58,60,73,79,48];
    $punteggiClasse5D = [70,66,48,50,13,99,38];

    // array_merge unisce i due array in uno solo (prima 5B, poi 5D)
    $array_risultante = array_merge($punteggiClasse5B,$punteggiClasse5D);
    echo "<br><b>3) Array unificato con array_merge (punteggi 5B seguiti dai punteggi 5D)</b><br>";
    print_r($array_risultante);

    echo "<br>--------------<br>";

    // ============================================================
    // 4. DA ARRAY A STRINGA E VICEVERSA
    // ============================================================

    $nomi = ["Stefano", "Mario", "Alex", "Francesca"];

    // implode: trasforma l'array in una stringa, separando gli elementi con la virgola
    $strNomi = implode(",",$nomi);
    echo "<b>4a) Stringa ottenuta con implode (array \$nomi -> stringa separata da virgole):</b> ";
    echo $strNomi;

    // explode: operazione inversa, spezza la stringa in un array usando la virgola
    $arrayNomiDaImportare = explode(",", $strNomi);
    echo "<br><b>4b) Array ricostruito con explode (stringa -> array):</b><br>";
    print_r($arrayNomiDaImportare);

    // ============================================================
    // 5. SOMMA E FILTRO
    // ============================================================

    $spese_condominiali = [600,500,400,700,650,900];

    // array_sum somma tutti gli elementi numerici dell'array
    $sum_spese_condominiali = array_sum($spese_condominiali);
    echo "<br><br><b>5a) Somma delle spese condominiali con array_sum:</b> ";
    echo "La somma delle spese condominiali è di: ".$sum_spese_condominiali." €";

    // Funzione usata come "filtro": restituisce true se l'importo è maggiore di 450
    function filtra_condominio($importo){
        return $importo > 450; //2 casi: true o false
    }

    // array_filter tiene solo gli elementi per cui la funzione restituisce true
    // (le chiavi originali vengono mantenute)
    $spese_magg_450eur = array_filter($spese_condominiali, 'filtra_condominio');
    echo "<br><br><b>5b) Spese condominiali maggiori di 450 € (array_filter, indici originali mantenuti)</b><br>";
    print_r($spese_magg_450eur);

    // ============================================================
    // 6. ARRAY ASSOCIATIVO (chiave => valore) E ARRAY ANNIDATO
    // ============================================================

    // Array associativo: le chiavi sono stringhe. "editore_riferimento"
    // contiene a sua volta un altro array (array multidimensionale)
    $libro = [
        "isbn" => "800763816625",
        "titolo" => "Corso di PHP",
        "disciplina" => "Informatica",
        "prezzo" => 28.50,
        "editore_riferimento" => [
            "nome" => "Mario",
            "cognome" => "Rossi",
            "indirizzo" => "Via dei Gelsomini 88"
        ]
    ];

    echo "<br><br><br><br>";
    echo "<b>6) Accesso ai valori dell'array associativo \$libro tramite la chiave</b><br>";
    echo "Il libro ha codice ISBN: <b>".$libro["isbn"]."</b><br>";
    echo "Il libro ha titolo: ".$libro["titolo"]."<br>";
    // Per l'array annidato si usano due chiavi in sequenza
    echo "Cognome e nome editore di riferimento (array annidato): ".$libro['editore_riferimento']['cognome']." ".$libro['editore_riferimento']['nome'];

    // ============================================================
    // 7. SCORRERE UN ARRAY ASSOCIATIVO CON FOREACH
    // ============================================================

    // Versione senza l'array annidato, più semplice da stampare in tabella
    $libro2 = [
        "isbn" => "800763816625",
        "titolo" => "Corso di PHP",
        "disciplina" => "Informatica",
        "prezzo" => 28.50
    ];

    echo "<br><br><br><br>";
    echo "<b>7) Tabella HTML generata con foreach (una riga per ogni coppia chiave/valore di \$libro2)</b><br>";

    // Costruisco l'HTML della tabella concatenando le stringhe nella variabile $output
    $output = "<table style='border: 2px solid black;'>";
    foreach ($libro2 as $key => $value) {
        $output .= "<tr>";
        $output .= "<td> $key </td>";     // prima colonna: la chiave
        $output .= "<td> $value </td>";   // seconda colonna: il valore
        $output .= "</tr>";
    }
    $output .= "</table>";
    echo $output;

    // ============================================================
    // 8. ESTRARRE SOLO CHIAVI O SOLO VALORI
    // ============================================================

    // array_keys restituisce un array con le sole chiavi
    $arraySoloChiavi = array_keys($libro2);
    echo "<br><b>8a) Solo le chiavi di \$libro2 (array_keys)</b><br>";
    print_r($arraySoloChiavi);

    echo "<br><br><br><br>";

    // array_values restituisce un array con i soli valori (reindicizzato da 0)
    $arraySoloValori = array_values($libro2);
    echo "<b>8b) Solo i valori di \$libro2 (array_values)</b><br>";
    print_r($arraySoloValori);

?>