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.
- Lettura di un file JSON con json_decode().
- Uso di array_filter() per filtrare dati.
- Form per ricerca per nome o filtro per età.
- Visualizzazione dei risultati filtrati in tabella HTML.
- Editor PHP (VS Code, Notepad++)
- Server locale (XAMPP, MAMP o Laragon)
- File studenti.json creato nei laboratori precedenti
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.