2014-01-09 28 views
0

我想使用PHP的setlocale()日期。 設置它喜歡:PHP的setlocales第二個參數作爲字符串

setlocale(LC_TIME, 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250'); 

工作正常,但如果我使用變量存儲喜歡的第二個參數:

的setlocale(LC_TIME,$區域);

它不起作用。

現在var $ locale包含正在從數據庫中提取的確切字符串'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250'

爲什麼不工作?

回答

1
$locale = "'foo','bar','baz'"; 
setlocale(LC_TIME, $locale); 

相同

setlocale(LC_TIME, "'foo','bar','baz'"); 

這是不一樣

setlocale(LC_TIME, 'foo', 'bar', 'baz'); 

後者經過4個獨立的參數,前兩個版本只是通過2個參數,第二個參數不是setlocale可以理解的格式。或者路過多個字符串,你也可以傳遞一個數組:

setlocale(LC_TIME, array('foo', 'bar', 'baz')); 

但要獲得字符串"'foo','bar','baz'"到數組array('foo', 'bar', 'baz')的形式,你必須做這樣的事情:

$locales = array_map(function ($l) { return trim($l, "'"); }, explode(',', $locale)); 

哪是不必要的複雜。您需要在數據庫中以不同的方式存儲您的語言環境,以便簡化該操作,現在他們的格式不適合此操作。

+0

謝謝array_map()工作完美 – user3176519

1

因爲$locale = 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250';是無效的PHP代碼(原因是逗號)。

就像在正式文檔描述關於setlocale()用於多個值的陣列:)與它

$locales = array('pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250'); 

和調用setlocale(。

setlocale(LC_TIME, $locales); 
相關問題