W3docs

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
ParametroObbligatorioDescrizione
$arrayL'array da cui leggere le chiavi.
$search_valueNoSe specificato, vengono restituite solo le chiavi il cui valore è uguale a questo.
$strictNoSe 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:

php— editable, runs on the server

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.

php— editable, runs on the server

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
bag

Nel 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 a count($arr) — preferire direttamente count($arr).
  • Verificare l'esistenza di una chiave: evitare in_array($k, array_keys($arr)) — usare array_key_exists() o isset(), che sono più veloci e chiari. (Per verificare un valore, usare in_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 mai false, quindi verificare con empty() o count(), 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().

Pratica

Pratica
Qual è il ruolo della funzione array_keys() in PHP?
Qual è il ruolo della funzione array_keys() in PHP?
Was this page helpful?