strnatcmp

(PHP 4, PHP 5, PHP 7)

strnatcmp"自然順"アルゴリズムにより文字列比較を行う

説明

int strnatcmp ( string $str1 , string $str2 )

この関数は、人間が行うような手法でアルファベットまたは数字の 文字列の順序を比較するアルゴリズムを実装します。この手法は、"自然順" と言われます。 この比較は、大文字小文字を区別することに注意してください。

パラメータ

str1

最初の文字列。

str2

次の文字列。

返り値

他の文字列比較関数と同様に、この関数は、 str1str2 より小さいに場合に < 0、str1str2 より大きい場合に > 0 、等しい場合に 0 を返します。

このアルゴリズムと (strcmp() を使用した) 通常のコンピュータ文字列ソートの間の違いの例を次に示します。

<?php
$arr1 
$arr2 = array("img12.png""img10.png""img2.png""img1.png");
echo 
"標準の文字列比較\n";
usort($arr1"strcmp");
print_r($arr1);
echo 
"\n自然順での文字列比較\n";
usort($arr2"strnatcmp");
print_r($arr2);
?>

上の例の出力は以下となります。

標準の文字列比較
Array
(
    [0] => img1.png
    [1] => img10.png
    [2] => img12.png
    [3] => img2.png
)

自然順での文字列比較
Array
(
    [0] => img1.png
    [1] => img2.png
    [2] => img10.png
    [3] => img12.png
)
詳細な情報については、Martin Pool の » 自然順文字列比較 のページを参照ください。

参考

  • preg_match() - 正規表現によるマッチングを行う
  • strcasecmp() - 大文字小文字を区別しないバイナリセーフな文字列比較を行う
  • substr() - 文字列の一部分を返す
  • stristr() - 大文字小文字を区別しない strstr
  • strcmp() - バイナリセーフな文字列比較
  • strncmp() - 最初の n 文字についてバイナリセーフな文字列比較を行う
  • strncasecmp() - バイナリセーフで大文字小文字を区別しない文字列比較を、最初の n 文字について行う
  • strnatcasecmp() - "自然順"アルゴリズムにより大文字小文字を区別しない文字列比較を行う
  • strstr() - 文字列が最初に現れる位置を見つける
  • natsort() - "自然順"アルゴリズムで配列をソートする
  • natcasesort() - 大文字小文字を区別しない"自然順"アルゴリズムを用いて配列をソートする

add a note add a note

User Contributed Notes 4 notes

up
4
thomas at uninet dot se
11 years ago
There seems to be a bug in the localization for strnatcmp and strnatcasecmp. I searched the reported bugs and found a few entries which were up to four years old (but the problem still exists when using swedish characters).

These functions might work instead.
<?php
function _strnatcasecmp($left, $right) {
  return
_strnatcmp(strtolower($left), strtolower($right));
}

function
_strnatcmp($left, $right) {
  while((
strlen($left) > 0) && (strlen($0natcasesort() -"aeeAlso">natcasesort() -"aeeAlso">natcasesort() -"aeeAlso">natcasesort() -&.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.h>'/^([^0-9]*)([0-9].*)$/Us'an class="default">$left
) > <>$left) > ) > ) > ) > 1-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc .-natc ) > ) > ) > 2-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc } elspanatc &.-natc &.-natc .-natc ) > ) > $left) > ''an class="default">$left'/^([^0-9]*)([0-9].*)$/Us'an class="default">$left) > ) > ) > ) > ) > 1-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc .-natc ) > ) > ) > 2-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc } elspanatc &.-natc &.-natc .-natc ) > ) > ) > ''an class="default">$left) > ) > - 最default">strlen() > ) > lso">natcasesort() -"aeeAlsonatc &.-natc &.-natc .-natc lass="keyword">), $left'/^([0-9]+)([^0-9].*)?$/Us'an class="default">$left) > <>$left) > ) > ) > intvp'>Tfault">strlen() > 1-natc &.-natc &.-natc &.-natc]);atc &.-natc &.-natc .-natc ) > ) > ) > 2-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc } elspanatc &.-natc &.-natc .-natc ) > ) > lso">natcasesort() -"aeeAl;atc &.-natc &.-natc }atc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.-natc &.h>'/^([0-9]+)([^0-9].*)?$/Us'an class="default">$left) > ) > ) > ) > intvp'>Tfault">strlen() > 1-natc &.-natc &.-natc &.-natc]);atc &.-natc &.-natc .-natc ) > ) > ) > 2-natc &.-natc &.-natc &.-natc];atc &.-natc &.-natc } elspanatc &.-natc &.-natc .-natc ) > ) > lso">natcasesort() -"aeeAl;atc &.-natc &.-natc }atc &.-natc &.-natc ) > ) > ) > ) > lso">natcasesort() -"aeeAlsonatc &.-natc &.-natc .-natc lass="keyword">), $left), strlen($left) > 0) > 文字an>< -examis&='/mamized. It was jusocusxam
    uick myclass="d.pspan cy ( [0] =>[0] =>[0] =&es-voteu">up 4
<120315mp&vote=down" title="Vote down!" class="usernotes-voted">down
4
<120315mp&vote=down" title="Vote down!" ctrong class="user">thomas at uninet dot se11 year120315 ">up/div>
ass="cd="gode"> There seems t120315 $left) > natcasesort() -"aeeAl[$leftup 4
<121044mp&vote=down" title="Vote down!" class="usernotes-voted">down
4
<121044mp&vote=down" title="Vote down!" ctrong class="user">thomas at uninet dot se
11 year121044 ">up/div>
There seems t121044 Gsyword">( wouldish tremanua81">lpha-nueric, > (( weg iison, irregardlef='of "ce"> length)word">( <, 2xD00012y.-natc .-natc (do
( <, 20x&.-n12y.-natc .-natc (do
( weg inuas.ro run='of nu><?lep'>Gs,<?ve E weg ii> each runcterisodd>Pre, untd>ai difef='/ma.pspan cy ( [0] =>[0] =>[0] =&es-voteu">up 4
<10124 mp&vote=down" title="Vote down!" class="usernotes-voted">down
4
<10124 mp&vote=down" title="Vote down!" ctrong class="user">thomas at uninet dot se
11 year10124 ">up/div>
There seems t10124 $left(natcasesort() -"aeeAl[$left() > <_SESSIONso">natcasesort() -"aeeAl[$leftstrlen($left
) > 文字列比較 Array ( [0] =>[0] =>[0] =&mg1.png four years foot'12'> add a note

User Contributed Notes 4 notes

006-07rc='/im>