多言語開発では、さまざまな言語のソートルールに従って配列のキーを比較して並べ替える必要があります。これを行うには、カスタムコールバック関数を使用して、キーの比較方法をカスタマイズできます。 PHPは、配列を操作するための多くの組み込み関数を提供し、 uksort()関数を使用すると、カスタムコールバック関数を使用して配列のキーを比較できます。
この記事では、多言語開発における配列キーの比較のためにコールバック関数を設計する方法を紹介し、この関数によってそれを並べ替える方法を示します。
PHPのuksort()関数は、ユーザー定義のコールバック関数に従って配列のキーを並べ替えるために使用されます。この関数は、ソートする必要がある配列とコールバック関数の2つのパラメーターを受け入れます。コールバック関数の返品値は、ソートの順序を決定します。
uksort(array &$array, callable $value_compare_func): bool
$配列:ソートする配列。
$ value_compare_func :配列のキーを比較するコールバック関数。
多言語によって開発された配列があるとし、キーは言語コードであり、値は対応する言語名であるとします。これらの言語を優先順位に従って並べ替えたいと考えています。
// 言語配列,キーは言語コードです,値は言語名です
$languages = [
'en' => 'English',
'zh' => '中国語',
'es' => 'Espa?ol',
'de' => 'Deutsch'
];
// 言語コードを比較するコールバック関数を定義します
function compare_language_keys($a, $b) {
// カスタムソートルールを設定します,ここでは、アルファベット順に並べ替えます
return strcmp($a, $b);
}
// 使用uksortキーでソートします
uksort($languages, 'compare_language_keys');
print_r($languages);
Array
(
[de] => Deutsch
[en] => English
[es] => Espa?ol
[zh] => 中国語
)
この例では、 Strcmp()関数を使用して、言語コードのアルファベット順の比較を実行します。言語の優先順位など、他のソートルールに従ってソートする場合は、コールバック関数のロジックを変更できます。
実際の開発では、異なる言語には優先順位が異なる場合があります。たとえば、一部の地域では、英語( EN )が中国人( ZH )よりも好まれる場合がありますが、他の地域では中国語が好まれる場合があります。カスタムコールバック関数を使用して、言語優先順位のソートを実装できます。
たとえば、言語アレイに優先度を追加し、優先順位で言語を並べ替えたいとします。
// 言語配列,キーは言語コードです,値は言語名です
$languages = [
'en' => 'English',
'zh' => '中国語',
'es' => 'Espa?ol',
'de' => 'Deutsch'
];
// カスタム言語の優先順位
$priority = [
'zh' => 1, // 中国語优先级最高
'en' => 2, // 英語の優先事項
'es' => 3, // スペイン語の優先事項は最後です
'de' => 4 // ドイツの優先事項が最後です
];
// コールバック関数を定義します,優先順位でソートします
function compare_language_priority($a, $b) {
global $priority;
return $priority[$a] - $priority[$b];
}
// 使用uksort優先順位でソートします
uksort($languages, 'compare_language_priority');
print_r($languages);
Array
(
[zh] => 中国語
[en] => English
[es] => Espa?ol
[de] => Deutsch
)
この例では、優先配列$の優先度を作成し、コールバック関数Compare_language_priority()の優先度に応じて言語を並べ替えます。
一部の多言語アプリケーションでは、言語に基づいて異なる言語バージョンでURLを構築する必要がある場合があります。たとえば、ユーザーが別の言語を選択する場合、異なる言語のURLを動的に生成する必要がある場合があります。
扱うURLがパスの一部として言語コードを含むと仮定すると、これらのURLをカスタムコールバック関数でソートできます。 uksort()で言語コードを含むURLを処理し、ドメイン名をm66.netに置き換える方法を示す例を次に示します。