localeconv()
Articolo sulla funzione PHP localeconv(), usata per ottenere le informazioni di formattazione per un locale specificato.
La funzione PHP localeconv() restituisce un array associativo che descrive come numeri e valute devono essere formattati nel locale attualmente attivo — quale separatore decimale utilizzare, quale separatore delle migliaia, il simbolo di valuta, dove vanno il simbolo e il segno, e così via. Legge qualsiasi locale impostato con setlocale(), quindi rappresenta il collegamento tra "in quale locale mi trovo" e "cosa dicono effettivamente le regole di formattazione."
Questa pagina tratta la sintassi, ogni chiave nell'array restituito, un esempio eseguibile e il problema che mette in difficoltà la maggior parte delle persone: il locale predefinito restituisce valori per lo più vuoti.
Sintassi
localeconv(): arraylocaleconv() non accetta alcun argomento e restituisce sempre un array. Non ha modalità di errore — non c'è alcun valore da passare e non restituisce mai false.
Un esempio di base
Si noti la chiamata a setlocale() nella prima riga. Senza di essa, lo script viene eseguito nel locale predefinito C, dove la maggior parte dei campi monetari viene restituita vuota — si veda il problema descritto di seguito.
L'array restituito
localeconv() restituisce queste chiavi. Le chiavi semplici (decimal_point, thousands_sep) si applicano ai numeri ordinari; le chiavi mon_* si applicano specificamente ai valori monetari.
| Chiave | Significato |
|---|---|
decimal_point | Separatore decimale per numeri non monetari (es. .) |
thousands_sep | Separatore delle migliaia per numeri non monetari (es. ,) |
grouping | Array che descrive il raggruppamento delle cifre, es. [3] = gruppi di 3 |
int_curr_symbol | Simbolo di valuta internazionale, es. USD |
currency_symbol | Simbolo di valuta locale, es. $ |
mon_decimal_point | Separatore decimale per valori monetari |
mon_thousands_sep | Separatore delle migliaia per valori monetari |
mon_grouping | Raggruppamento delle cifre per valori monetari |
positive_sign / negative_sign | Stringhe di segno per valori positivi / negativi |
int_frac_digits / frac_digits | Numero di cifre frazionarie (internazionale / locale) |
p_cs_precedes / n_cs_precedes | 1 se il simbolo di valuta precede un valore positivo / negativo, 0 se segue |
p_sep_by_space / n_sep_by_space | 1 se uno spazio separa il simbolo dal valore |
p_sign_posn / n_sign_posn | Dove si trova il segno rispetto al valore e al simbolo |
Per ispezionare l'intero array in una volta sola, usare print_r():
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
print_r(localeconv());
?>Per un sistema en_US.UTF-8 questo stampa (abbreviato):
Array
(
[decimal_point] => .
[thousands_sep] => ,
[int_curr_symbol] => USD
[currency_symbol] => $
[frac_digits] => 2
[p_cs_precedes] => 1
[grouping] => Array ( [0] => 3 )
...
)Problema: il locale predefinito restituisce valori vuoti
Prima di chiamare localeconv(), PHP viene eseguito nel locale C a meno che non ne venga impostato uno. Nel locale C quasi tutti i campi monetari sono vuoti e i campi con il conteggio delle cifre valgono 127 (il marcatore dello standard C per "valore non disponibile"):
<?php
// No setlocale() — default C locale.
$info = localeconv();
var_dump($info['currency_symbol']); // string(0) ""
var_dump($info['frac_digits']); // int(127)
?>Quindi se localeconv() sembra "non restituire nulla di utile," quasi certamente si è dimenticato di chiamare prima setlocale(). Impostare il locale in modo esplicito, ed essere consapevoli che i locale disponibili dipendono dal sistema operativo su cui viene eseguito lo script.
Quando utilizzarla?
Raramente si chiama localeconv() per formattare l'output manualmente — number_format() e la classe NumberFormatter dell'estensione intl lo fanno al posto vostro. È più utile quando si hanno bisogno delle regole di locale grezze, ad esempio per:
- costruire un formattatore personalizzato che rispetti il locale dell'utente,
- normalizzare l'input dell'utente (sapendo se
1.234,56usa,o.come separatore decimale), - decidere se il simbolo di valuta va prima o dopo l'importo.
Funzioni correlate
setlocale()— imposta il locale da cuilocaleconv()legge.number_format()— formatta un numero con migliaia raggruppate.money_format()— formattazione valuta in base al locale (rimossa in PHP 8.0).strftime()— formattazione data/ora in base al locale.