私はHTTP_ACCEPT_LANGUAGEヘッダーを解析してユーザーの言語を取得しており、そのためのクラスを作成しています。2つの連想配列をループしてその値に一致させるより良い方法はありますか?
実際には、キーが言語(「en-us」、「it-it」、「it-ch」など)である連想配列(「$ this-> user_lang」)を作成します。品質係数(だから私は言語を注文することができます)。 次に、 "$ this-> installed_langs"という別の連想配列をサポートする言語とロケールを宣言します( "en" => "en_US"、 "it" => "it_IT"の形式)。
"$ this-> installed_langs"( " - "の後にローカルゾーンを気にせず)のいずれかと "$ this-> user_lang"のキーの1つを一致させようとするだけです。最初のオカレンスを返します(他のマッチングの場合は気にしないでください)。
私はあなたがより多くの情報を必要とするところで場合は、私に聞いてください、それをうまく説明している願っています
public function show() {
$g_locale = null;
foreach ($this->user_lang as $lang => $q) {
foreach($this->installed_langs as $valid => $locale) {
if (strpos($lang, $valid) !== false) {
if ($g_locale === null) $g_locale = $locale;
}
}
}
// debug:
echo $g_locale;
}
...私はこの方法で終わったが、それは少し複雑すぎるようです。
を試してみてください? – Calum
私は見つかった各言語のネストされたforeachループを避けたいので...それはヘッダーで送られるブラウザで宣言された言語の数によって異なります。 –