W3docs

in_array()

Scopri come in_array() di PHP verifica l'esistenza di un valore in un array, le differenze tra confronto loose e strict e gli errori di type-juggling da evitare.

Cosa fa in_array()

in_array() verifica se un determinato valore esiste in un array e restituisce un boolean: true se il valore viene trovato, false in caso contrario. Esegue la ricerca sui valori dell'array (non sulle chiavi), il che la rende la funzione ideale per domande come "questa opzione è consentita?" o "questo utente è già stato aggiunto alla lista?".

Questa pagina illustra la firma della funzione, come il confronto loose e strict influenza il risultato, gli errori di type-juggling che spesso sorprendono i programmatori, e quando conviene usare una funzione diversa.

Sintassi

in_array(mixed $needle, array $haystack, bool $strict = false): bool
ParametroDescrizione
$needleIl valore da cercare.
$haystackL'array in cui eseguire la ricerca.
$strictQuando è true, anche i tipi devono corrispondere (usa === invece di ==). Il valore predefinito è false.

La funzione restituisce true se $needle viene trovato in $haystack, altrimenti false.

Esempio di base

<?php

$fruits = ["apple", "banana", "orange"];

if (in_array("banana", $fruits)) {
    echo "Found!";
} else {
    echo "Not found.";
}
// Output: Found!

in_array() è case-sensitive per le stringhe — "Apple" non corrisponde a "apple":

php— editable, runs on the server

Confronto loose e strict

Per impostazione predefinita in_array() usa il confronto loose (==), quindi valori di tipo diverso possono corrispondere. Passa true come terzo argomento per richiedere una corrispondenza di tipo esatta (===):

<?php

$numbers = [1, 2, 3, 4];

// Loose: the string "1" equals the integer 1
var_dump(in_array("1", $numbers));        // bool(true)

// Strict: "1" (string) is not identical to 1 (int)
var_dump(in_array("1", $numbers, true));  // bool(false)

Usa la modalità strict quando il tuo array mescola tipi, oppure quando una corrispondenza con il tipo sbagliato sarebbe un errore — ad esempio quando si controlla un ID fornito dall'utente rispetto a una lista di ID interi.

L'insidia del type-juggling

Il confronto loose può produrre risultati sorprendenti. Un esempio classico cerca una stringa vuota o 0 in una lista di stringhe:

<?php

$values = [0, "", "foo", "bar"];

var_dump(in_array("0", $values));       // bool(true)  — "0" == 0
var_dump(in_array("0", $values, true)); // bool(false) — different types

Qui "0" (stringa) è loosely uguale all'intero 0 già presente nell'array, quindi la ricerca loose restituisce true. La modalità strict elimina l'ambiguità.

Nota: PHP 8 ha cambiato il confronto tra stringhe e numeri. In PHP 7, in_array(0, ["foo", "bar"]) restituiva true perché "foo" veniva convertito a 0. In PHP 8+ la stessa chiamata restituisce false. In caso di dubbio, passa $strict = true.

Ottenere la posizione invece di true/false

in_array() indica solo se un valore esiste. Se hai bisogno anche della sua chiave, usa array_search() — restituisce la chiave in caso di successo e false in caso di fallimento:

<?php

$fruits = ["apple", "banana", "orange"];

$key = array_search("banana", $fruits);
var_dump($key); // int(1)

Per verificare se esiste una determinata chiave (non un valore), usa invece array_key_exists() o isset().

Quando usare una funzione diversa

  • Hai bisogno della posizione del valore corrispondente? → array_search()
  • Stai controllando una chiave anziché un valore? → array_key_exists() o isset()
  • Vuoi filtrare un array fino agli elementi corrispondenti? → array_filter()
  • Stai cercando ripetutamente in un array molto grande? Convertilo in chiavi con array_keys() e usa isset(), che è più veloce della scansione con in_array().
  • in_array($needle, $haystack) restituisce true/false per indicare se un valore esiste in un array.
  • Esegue la ricerca sui valori, è case-sensitive per le stringhe e usa il confronto loose per impostazione predefinita.
  • Passa true come terzo argomento per il confronto strict (con controllo del tipo) — preferibile quando i tipi sono importanti.
  • Usa array_search() quando hai bisogno della chiave, e array_key_exists()/isset() per controllare le chiavi.

Esercitazione

Pratica
Qual è lo scopo della funzione 'in_array' in PHP?
Qual è lo scopo della funzione 'in_array' in PHP?
Was this page helpful?