Guida Completa alla Funzione array_keys di PHP
Scopri come usare la funzione array_keys di PHP per estrarre le chiavi di un array, filtrare per valore e gestire i confronti in modalità loose o strict.
array_keys() restituisce le chiavi (gli indici) di un array come nuovo array rinumerato numericamente. È uno dei modi più comuni per ispezionare la struttura di un array: si ricorre a questa funzione ogni volta che si è interessati a quali slot ha un array, piuttosto che ai valori contenuti in essi.
Questo capitolo spiega la sintassi, la modalità opzionale di ricerca per valore, la differenza tra confronto loose e strict, e i pattern di utilizzo quotidiano in cui array_keys() è lo strumento giusto.
Cosa fa array_keys()
Ogni array PHP è una mappa ordinata di coppie chiave → valore. La chiave può essere un intero (come in un semplice array indicizzato) o una string (come in un array associativo). array_keys() scarta i valori e restituisce solo le chiavi, nel loro ordine originale, rinumerate a partire da 0:
- Passando un solo array si ottengono tutte le chiavi.
- Passando anche un valore di ricerca si ottengono solo le chiavi il cui valore corrisponde a quel valore.
Il risultato è sempre un nuovo array, quindi quello originale non viene mai modificato. Se invece si vogliono i valori, usare array_values(); se si ha bisogno solo di sapere se una specifica chiave è presente, array_key_exists() è più efficiente.
Sintassi
array_keys(array $array, mixed $search_value = ?, bool $strict = false): array| Parametro | Obbligatorio | Descrizione |
|---|---|---|
$array | Sì | L'array da cui leggere le chiavi. |
$search_value | No | Se specificato, vengono restituite solo le chiavi il cui valore è uguale a questo. |
$strict | No | Se true, usa il confronto strict (===) per la ricerca, richiedendo che anche i tipi corrispondano. Il valore predefinito è false. |
La funzione restituisce sempre un array; senza corrispondenze restituisce un array vuoto, mai false.
Ottenere tutte le chiavi di un array
L'utilizzo più comune è estrarre ogni chiave da un array associativo:
Output:
Array
(
[0] => a
[1] => b
[2] => c
)L'array $keys restituito contiene le tre chiavi string "a", "b" e "c", reindicizzate a partire da 0. I valori (apple, banana, cherry) sono scomparsi — rimangono solo le chiavi.
Trovare le chiavi per un valore
Passando un secondo argomento, array_keys() diventa una ricerca: restituisce la chiave di ogni elemento uguale a quel valore. Questa è la principale differenza rispetto a array_search(), che si ferma alla prima corrispondenza.
Output:
Array
(
[0] => 0
[1] => 3
)"apple" appare nelle posizioni 0 e 3, quindi entrambe le chiavi vengono restituite. Se il valore non viene trovato, si ottiene un array vuoto.
Confronto loose e strict
Per impostazione predefinita, la ricerca per valore usa il confronto loose (==), quindi 1, "1" e 1.0 sono considerati uguali. Impostando il terzo argomento a true si richiede una corrispondenza esatta di tipo e valore (===):
<?php
$values = array("1", 1, "one", 1, "1");
// Loose: matches both strings and integers
print_r(array_keys($values, 1));
// Strict: matches only the integer 1
print_r(array_keys($values, 1, true));
?>Output:
Array
(
[0] => 0
[1] => 1
[2] => 3
[3] => 4
)
Array
(
[0] => 1
[1] => 3
)La ricerca loose trova "1", 1, 1 e "1" (chiavi 0, 1, 3, 4), mentre la ricerca strict trova solo i due interi 1 (chiavi 1 e 3). Usare $strict = true ogni volta che l'array mescola string e numeri e la distinzione è importante.
Chiavi di un array multidimensionale
array_keys() analizza solo il livello superiore — restituisce le chiavi dell'array esterno senza mai scendere negli array annidati. Con un array multidimensionale si ottengono le chiavi esterne:
<?php
$matrix = array(
"row1" => array("a" => 1, "b" => 2),
"row2" => array("c" => 3),
);
print_r(array_keys($matrix));
?>Output:
Array
(
[0] => row1
[1] => row2
)Per raccogliere anche le chiavi interne, è necessario iterare il risultato e chiamare array_keys() su ogni sotto-array.
Iterare sulle chiavi
Un pattern frequente è iterare una struttura tramite le sue chiavi. Poiché array_keys() restituisce una lista pulita, è possibile usarla direttamente per guidare un ciclo foreach:
<?php
$prices = array("pen" => 1.20, "book" => 5.00, "bag" => 12.50);
foreach (array_keys($prices) as $item) {
echo $item . PHP_EOL;
}
?>Output:
pen
book
bagNel codice quotidiano si potrebbe preferire foreach ($prices as $item => $price) — ma array_keys() è utile quando si ha bisogno della lista delle chiavi come valore (per passarla altrove, contarla o confrontare le chiavi di due array).
Casi d'uso comuni e avvertenze
- Contare le chiavi:
count(array_keys($arr))equivale acount($arr)— preferire direttamentecount($arr). - Verificare l'esistenza di una chiave: evitare
in_array($k, array_keys($arr))— usarearray_key_exists()oisset(), che sono più veloci e chiari. (Per verificare un valore, usarein_array().) - Il risultato è sempre reindicizzato: le chiavi dell'array restituito sono
0, 1, 2, …indipendentemente dalle chiavi originali. - Nessuna corrispondenza restituisce
[]: la ricerca per valore non restituisce maifalse, quindi verificare conempty()ocount(), non con=== false.
Conclusione
array_keys() estrae le chiavi di un array, con filtraggio opzionale per valore tramite confronto loose o strict. Si usa per elencare le chiavi, trovare tutte le posizioni di un valore o passare una lista di chiavi a un ciclo. Per i valori corrispondenti usare array_values(), per verificare una singola chiave usare array_key_exists(), e per trovare la prima corrispondenza di un valore usare array_search().