PHP

Filtrare I Dati Json Con Php

Filtrare dati JSON con PHP usando array_filter() e un form per cercare studenti per nome o età.

Dopo aver imparato a leggere file JSON con json_decode(), in questa lezione impareremo a filtrare i dati utilizzando PHP. Useremo la funzione array_filter() per selezionare solo gli elementi che soddisfano determinate condizioni (es. studenti maggiorenni o con un nome specifico).


Funzione array_filter()

La funzione array_filter() permette di creare un nuovo array contenente solo gli elementi che soddisfano una determinata condizione (definita in una funzione anonima).


array_filter(array $array, ?callable $callback = null, int $mode = 0): array

Esempio:


<?php
$numeri = [1, 5, 10, 15];
$maggiori_di_5 = array_filter($numeri, function($n) {
    return $n > 5;
});
print_r($maggiori_di_5);
?>

Risultato: [10, 15]


Filtrare dati JSON

Quando decodifichiamo un file JSON con json_decode(), otteniamo un array PHP. Su questo array possiamo applicare array_filter() per cercare o selezionare dati specifici.

LABORATORIO

Filtrare un archivio JSON con PHP

In questo laboratorio realizzerai una pagina PHP che legge il file studenti.json e permette di filtrare i dati tramite un form. Potrai cercare per nome o mostrare solo gli studenti maggiorenni.


1 Creazione del file filtra_studenti.php

Crea un nuovo file PHP con il seguente codice per leggere l'archivio e filtrare i dati in base all'input del form.


<?php
// Legge e decodifica il file JSON
$studenti = json_decode(file_get_contents("studenti.json"), true);

// Recupera i parametri dal form
$ricerca = trim($_GET["ricerca"] ?? "");
$filtro = $_GET["filtro"] ?? "tutti";

// Funzione di filtraggio
$filtrati = array_filter($studenti, function($studente) use ($ricerca, $filtro) {

    // Filtro per nome
    if (!empty($ricerca)) {
        return stripos($studente["nome"], $ricerca) !== false;
    }

    // Filtro per età
    if ($filtro == "maggiorenni") {
        return $studente["eta"] >= 18;
    } elseif ($filtro == "minorenni") {
        return $studente["eta"] < 18;
    }

    return true; // Nessun filtro attivo
});
?>

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <title>Filtra studenti JSON</title>
</head>
<body>
    <h2>Archivio studenti</h2>

    <form method="get" action="<?= htmlspecialchars($_SERVER["PHP_SELF"]) ?>">
        Cerca per nome:
        <input type="text" name="ricerca" value="<?= htmlspecialchars($ricerca) ?>">

        <select name="filtro">
            <option value="tutti" <?= $filtro=="tutti"?"selected":"" ?>>Tutti</option>
            <option value="maggiorenni" <?= $filtro=="maggiorenni"?"selected":"" ?>>Solo maggiorenni</option>
            <option value="minorenni" <?= $filtro=="minorenni"?"selected":"" ?>>Solo minorenni</option>
        </select>

        <input type="submit" value="Filtra">
    </form>

    <h3>Risultati:</h3>
    <table border="1" cellpadding="5">
        <tr><th>Nome</th><th>Età</th></tr>
        <?php foreach ($filtrati as $s): ?>
            <tr>
                <td><?= htmlspecialchars($s["nome"]) ?></td>
                <td><?= $s["eta"] ?></td>
            </tr>
        <?php endforeach; ?>
    </table>

    <p>Totale risultati: <b><?= count($filtrati) ?></b></p>
</body>
</html>
    

2 Esecuzione del programma

Avvia la pagina e prova:

  • Digitare una parte del nome (es. “an” per cercare “Anna”).
  • Selezionare “Solo maggiorenni” o “Solo minorenni”.
  • Lasciare il campo vuoto e “Tutti” per mostrare l'archivio completo.

3 Come funziona il filtro

  • Il file JSON viene letto e convertito in array con json_decode().
  • Il form invia i dati tramite GET.
  • array_filter() controlla ogni studente e restituisce solo quelli che rispettano la condizione.
  • I risultati vengono mostrati in tabella HTML.