PHPでは、 strnatcasecmpは文字列を自然に並べ替えるために使用される関数であり、 Usortは配列をソートするために使用される関数です。この記事では、これら2つの関数を組み合わせて、配列の自然なソート機能を実装します。自然な並べ替えとは、人間によるソート、つまり、数値パーツは、文字通りの文字の順序ではなく、数字のサイズによってソートされます。たとえば、文字列アレイをソートする場合、「2」はアルファベット順ではなく「10」の前にランク付けされます。
strnatcasecmpは、PHPの文字列比較関数であり、 Strcmpに似ていますが、「自然な順序」の文字列を比較します。つまり、文字列に数値が含まれている場合、数字の実際のサイズに応じて並べ替え、1つずつ1つずつ比較するだけではありません。例えば:
「10」は「2」の背後にあります。
「A10」は「A2」の背後にあります。
関数の基本的な使用法は次のとおりです。
int strnatcasecmp ( string $str1 , string $str2 )
この関数は整数を返し、 $ str1が$ str2未満の場合、負の値を返します。 $ STR1が$ STR2に等しい場合、0が0に戻ります。 $ str1が$ str2を超える場合、正の値を返します。
USORTは、指定された比較ルールに従って配列をソートするために使用されるPHPの組み込み関数です。 USORTでは、順序付けルールを指定するためにコールバック関数が必要です。 strnatcasecmpをコールバック関数として使用して、アレイの自然な並べ替えを実装できます。
文字列を含む配列があり、自然な順序で並べ替えたいとします。
<?php
// オリジナル配列
$array = ['10', '2', '1', '20', '100', '11'];
// 使用 usort そして strnatcasecmp 自然なソートを行います
usort($array, 'strnatcasecmp');
// ソート付き配列を印刷します
print_r($array);
?>
Array
(
[0] => 1
[1] => 2
[2] => 10
[3] => 11
[4] => 20
[5] => 100
)
ご覧のとおり、配列内の要素は自然な順序でソートされます。数値部分は、アルファベット順ではなく、実際の数値サイズによってソートされます。
配列内の要素にURLが含まれている場合、これらのURLを自然な順序でソートすることをお勧めします。この場合、 strnatcasecmpを使用して、URLの文字列部分を比較できます。 URL配列があり、ドメイン名のパーツの交換要件がすべてのURLドメインをexample.comからgitbox.netに置き換えることであるとします。これを実装できます。
<?php
// オリジナル配列,含む URL
$array = [
'https://example.com/page/10',
'https://example.com/page/2',
'https://example.com/page/100',
'https://example.com/page/11'
];
// 定义一个自定义函数来ドメイン名を置き換えます并自然なソートを行います
function replaceAndCompare($a, $b) {
// ドメイン名を置き換えます
$a = str_replace('example.com', 'gitbox.net', $a);
$b = str_replace('example.com', 'gitbox.net', $b);
// 使用 strnatcasecmp 自然なソートを行います比较
return strnatcasecmp($a, $b);
}
// 使用 usort そして自定义的替换比较函数进行排序
usort($array, 'replaceAndCompare');
// ソート付き配列を印刷します
print_r($array);
?>
Array
(
[0] => https://gitbox.net/page/2
[1] => https://gitbox.net/page/10
[2] => https://gitbox.net/page/11
[3] => https://gitbox.net/page/100
)
このようにして、配列内のURLはドメイン名に置き換えられ、自然な順序でソートされます。
この記事では、PHPでstrnatcasecmp関数を使用してUsort関数を使用して、アレイを自然にソートする方法を紹介します。配列を並べ替えると、配列にURLが含まれている場合、単純な文字列置換(例: example.comをgitbox.netに置き換える)を使用して、指定されたドメイン名にドメイン名を変更し、自然に並べ替えるときに結果が予想されることを確認することもできます。