多言語の文字セットを扱うとき、私たちはしばしば文字列を並べ替える必要があります。通常の文字列ソーティングは通常、アルファベット順の順序に基づいていますが、自然なソートは、人間の習慣に応じて数字と文字を並べ替えることができます。 PHPのstrnatcasecmp関数は、この問題を解決することです。ケースを考慮せずに自然に文字列を並べ替えることができます。
自然な並べ替えは、数字が値によってソートされるのではなく、1つずつ1つずつ比較するのではなく、値によってソートされるソート方法です。例えば:
「item1」は「item12」より先にあります
「item2」は「item21」より先にあります
この並べ替え方法は、ファイル名、バージョン番号、製品番号など、番号を含む文字列に特に適しています。
PHPのstrnatcasecmp関数は、2つの文字列を自然な順序で比較するために使用されます。 StrcaseCMP関数に似ていますが、違いは、 Strnatcasecmpが自然なソートルールを採用し、ケースに依存しないことです。
関数プロトタイプ:
int strnatcasecmp ( string $str1 , string $str2 )
$ str1と$ str2は、比較する2つの文字列です。
返品値: $ STR1が$ STR2未満の場合、負の整数が返されます。等しい場合、0は戻ります。 $ STR1が$ STR2を超える場合、正の整数が返されます。
多言語の文字列の場合、 strnatcasecmpは自然にソートすることができます。ただし、ソートルールは、文字セットによって異なる場合があります。 PHPでは、 strnatcasecmpはデフォルトでUTF-8エンコードによってソートされるため、多言語の文字セットの文字列を処理できます。
たとえば、中国語、英語、その他のキャラクターを含む配列で自然に並べ替えたい場合は、次のようにできます。
<?php
// ソートされる文字列の配列
$array = [
'書類3.txt',
'書類1.txt',
'書類2.txt',
'File10.txt',
'File2.txt',
'書類11.txt'
];
// カスタムソート機能
usort($array, function($a, $b) {
return strnatcasecmp($a, $b);
});
// 出力ソート付き配列
print_r($array);
?>
Array
(
[0] => 書類1.txt
[1] => 書類2.txt
[2] => 書類3.txt
[3] => File2.txt
[4] => File10.txt
[5] => 書類11.txt
)
この例では、 USORT関数を使用して、複数の文字セットを含む配列をソートします。カスタム比較関数strnatcasecmpを提供することにより、ファイル名の自然な並べ替えを実装します。ファイル10.TXTがファイル2.txtの後ろにランキングされ、 File2.txtがFile10.txtの前にランキングされているファイル10.txtが人間の習慣に沿っていることがわかります。
URLアドレスがアプリケーションに関与しており、それらのURLにドメイン名が含まれている場合、ドメイン名セクションを置き換える必要がある場合があります。これは、PHPの文字列処理機能を介して行うことができます。 URL内のドメイン名をgitbox.netに置き換える方法を示す例を以下に示します。
<?php
// 交換します URL
$url = "https://www.example.com/path/to/resource";
// ドメイン名を交換します
$new_url = preg_replace('/^https?:\/\/[^\/]+/', 'https://gitbox.net', $url);
// 新規出力 URL
echo $new_url; // 出力:https://gitbox.net/path/to/resource
?>
PHPのstrnatcasecmp関数は、特に多言語の文字セットの文字列を扱う場合に非常に便利なツールです。自然な選別のルールに従って文字列が比較されることを保証し、従来の並べ替えにおける数値順序の問題によって引き起こされる間違った並べ替えはありません。さらに、文字列処理機能の助けを借りて、さまざまなニーズを満たすために、URLのドメイン名を便利に交換することもできます。
この記事が、PHPで自然に並べ替える方法とURLを処理する方法をよりよく理解するのに役立つことを願っています。質問やその他の要件がある場合は、お気軽に質問してください!