array_change_key_case()
Scopri come usare array_change_key_case() in PHP per convertire le chiavi di un array in minuscolo o maiuscolo.
Funzione PHP array_change_key_case()
array_change_key_case() restituisce una copia di un array con tutte le chiavi string convertite in minuscolo o maiuscolo. È particolarmente utile per normalizzare le chiavi provenienti da sorgenti imprevedibili — intestazioni HTTP, titoli di colonne CSV, righe di database o input dell'utente — in modo che il resto del codice possa accedervi con una singola notazione conosciuta.
Questa pagina illustra la sintassi, i parametri, il valore restituito, le insidie legate alle chiavi numeriche e alle collisioni di chiavi, oltre ad alcuni esempi pratici.
Sintassi
array_change_key_case(array $array, int $case = CASE_LOWER): array| Parametro | Descrizione |
|---|---|
$array | L'array di input. Non viene modificato — viene restituito un nuovo array. |
$case | Una delle costanti CASE_LOWER (valore predefinito) o CASE_UPPER. |
La funzione restituisce un nuovo array con le chiavi convertite nel caso specificato; l'array originale rimane invariato. Solo le chiavi string sono interessate — le chiavi intere vengono restituite senza modifiche (vedi Le chiavi numeriche vengono ignorate qui sotto).
Esempio di base: chiavi in maiuscolo
Output:
Array
(
[FIRST_NAME] => John
[LAST_NAME] => Doe
)Le chiavi sono ora in maiuscolo, mentre i valori (John, Doe) rimangono invariati.
Comportamento predefinito: conversione in minuscolo
Quando si omette l'argomento $case, il valore predefinito è CASE_LOWER, quindi le chiavi diventano minuscole. Questo è l'uso più comune — normalizzare l'input con maiuscole miste prima di leggerlo:
<?php
$headers = array("Content-Type" => "text/html", "X-Powered-By" => "PHP");
// No second argument → CASE_LOWER
$normalized = array_change_key_case($headers);
echo $normalized["content-type"]; // text/htmlOutput:
text/htmlIn questo modo si può sempre leggere $normalized["content-type"] indipendentemente dalla notazione originale dell'intestazione.
Le chiavi numeriche vengono ignorate
array_change_key_case() agisce solo sulle chiavi string. Le chiavi intere passano inalterate, quindi un array indicizzato viene restituito esattamente come è stato fornito:
<?php
$mixed = array("Name" => "Ada", 0 => "zero", "Age" => 36);
print_r(array_change_key_case($mixed, CASE_UPPER));Output:
Array
(
[NAME] => Ada
[0] => zero
[AGE] => 36
)Attenzione alle collisioni di chiavi
Poiché le chiavi di un array PHP devono essere univoche, la conversione può far collidere due chiavi distinte. In quel caso, vince il valore successivo e la voce precedente viene eliminata silenziosamente:
<?php
$array = array("Name" => "Ada", "name" => "Grace");
print_r(array_change_key_case($array, CASE_LOWER));Output:
Array
(
[name] => Grace
)Sia "Name" che "name" diventano "name", quindi sopravvive solo l'ultima assegnazione (Grace). Se è importante preservare ogni voce, verificare la presenza di duplicati senza distinzione tra maiuscole e minuscole prima di chiamare questa funzione.
Viene modificato solo il livello superiore
Questa funzione non è ricorsiva — le chiavi degli array annidati vengono lasciate invariate. Per modificare le chiavi a livelli più profondi della struttura è necessario scorrere l'array manualmente:
<?php
function changeKeyCaseRecursive(array $array, int $case = CASE_LOWER): array
{
$result = array_change_key_case($array, $case);
foreach ($result as $key => $value) {
if (is_array($value)) {
$result[$key] = changeKeyCaseRecursive($value, $case);
}
}
return $result;
}
$data = array("User" => array("First" => "Ada"));
print_r(changeKeyCaseRecursive($data, CASE_UPPER));Output:
Array
(
[USER] => Array
(
[FIRST] => Ada
)
)Casi d'uso comuni
- Normalizzare le intestazioni HTTP o i parametri di query in modo che le ricerche non dipendano dalla notazione usata dal mittente.
- Pulire le intestazioni di colonne CSV o fogli di calcolo prima di mappare le righe al proprio modello.
- Rendere coerenti le chiavi di configurazione o di database in codice scritto da persone diverse.
Funzioni correlate
strtolower()estrtoupper()— modificano la notazione di un valore string (questa funzione le usa sulle chiavi).array_keys()earray_values()— estraggono le chiavi o i valori di un array.array_flip()— scambia chiavi e valori.array_map()— trasforma i valori di un array con una callback.- Vedi PHP Arrays per una panoramica più ampia.