strnatcasecmp( string $str1, string $str2 )

strnatcasecmp( string $str1, string $str2 )は、自然順アルゴリズムにより、文字列を比較する組み込み関数。大文字と小文字は、区別しない。

usort()uksort()uasort()などの配列をソートする関数の、コールバック関数に「strnatcasecmp」を指定し、配列を自然順ソートすることもできる。

strnatcmp( string $str1, string $str2 )と似ているが、strnatcasecmp( string $str1, string $str2 )は、大文字と小文字を区別しない。

定義

整数型 strnatcasecmp( 文字列型 $str1, 文字列型 $str2 );

パラメータ

文字列型 $str1

「$str2」と比較したい文字列を指定する。

文字列型 $str2

「$str1」と比較したい文字列を指定する。

戻り値

「$str1」と「$str2」の文字列を比較し、「$str1」が「$str2」より大きければ「正数」、「$str1」と「$str2」が等しければ「0」、「$str1」が「$str2」より小さければ「負数」を返す。

  • $str1 > $str2 : 正数
  • $str1 = $str2 : 0
  • $str1 < $str2 : 負数

構文

文字列比較

整数 = strnatcasecmp( 文字列1, 文字列2 );

「文字列1」と「文字列2」の文字列を、自然順アルゴリズムで比較し、「文字列1」が「文字列2」より大きければ「正数」、「文字列1」と「文字列2」が等しければ「0」、「文字列1」が「文字列2」より小さければ「負数」を返す。

usortのコールバック関数に使い、配列を自然順ソート

usort( 配列, "strnatcasecmp" );

「配列」の要素を、自然順で並べ替える。

サンプル

数字を文字列比較

<?php
echo strnatcasecmp( 10, 5 ) . "<br />";
echo strnatcasecmp( 10, 10 ) . "<br />";
echo strnatcasecmp( 5, 10 ) . "<br />";
?>

↓↓↓出力結果↓↓↓

1
0
-1

アルファベットを文字列比較

大文字と小文字を区別しない点に注目。

<?php
echo strnatcasecmp( "white", "black" ) . "<br />";
echo strnatcasecmp( "white", "white" ) . "<br />";
echo strnatcasecmp( "white", "WHITE" ) . "<br />";
echo strnatcasecmp( "black", "white" ) . "<br />";
?>

↓↓↓出力結果↓↓↓

1
0
0
-1

ひらがなを文字列比較

<?php
echo strnatcasecmp( "やまだ", "たかはし" ) . "<br />";
echo strnatcasecmp( "やまだ", "やまだ" ) . "<br />";
echo strnatcasecmp( "たかはし", "やまだ" ) . "<br />";
?>

↓↓↓出力結果↓↓↓

1
0
-1

数字を自然順ソート

<pre>
<?php
$arrayA = array( 2, 10, 7, 500, 70 );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => 2
    [1] => 7
    [2] => 10
    [3] => 70
    [4] => 500
)

アルファベットを自然順ソート

<pre>
<?php
$arrayA = array( "White", "Black", "Red", "Blue", "Green" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => Black
    [1] => Blue
    [2] => Green
    [3] => Red
    [4] => White
)

ひらがなを自然順ソート

<pre>
<?php
$arrayA = array( "こ", "か", "た", "わ", "い" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => い
    [1] => か
    [2] => こ
    [3] => た
    [4] => わ
)

カタカナを自然順ソート

<pre>
<?php
$arrayA = array( "コ", "カ", "タ", "ワ", "イ" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => イ
    [1] => カ
    [2] => コ
    [3] => タ
    [4] => ワ
)

アルファベットと数字の文字列を自然順ソート

<pre>
<?php
$arrayA = array( "img2.png", "img10.png", "img7.png", "img500.png", "img70.png" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>

↓↓↓出力結果↓↓↓

Array
(
    [0] => img2.png
    [1] => img7.png
    [2] => img10.png
    [3] => img70.png
    [4] => img500.png
)

数字の標準ソートと自然順ソートの比較

<pre>
<?php
$arrayA = $arrayB = array( 2, 10, 7, 500, 70 );
echo "標準ソート\n";
usort( $arrayA, "strcasecmp" );
print_r( $arrayA );
echo "\n自然順ソート\n";
usort( $arrayB, "strnatcasecmp" );
print_r( $arrayB );
?>
</pre>

↓↓↓出力結果↓↓↓

標準ソート
Array
(
    [0] => 10
    [1] => 2
    [2] => 500
    [3] => 7
    [4] => 70
)

自然順ソート
Array
(
    [0] => 2
    [1] => 7
    [2] => 10
    [3] => 70
    [4] => 500
)

アルファベットと数字の文字列の標準ソートと自然順ソートの比較

<pre>
<?php
$arrayA = $arrayB = array( "img2.png", "img10.png", "img7.png", "img500.png", "img70.png" );
echo "標準ソート\n";
usort( $arrayA, "strcasecmp" );
print_r( $arrayA );
echo "\n自然順ソート\n";
usort( $arrayB, "strnatcasecmp" );
print_r( $arrayB );
?>
</pre>

↓↓↓出力結果↓↓↓

標準ソート
Array
(
    [0] => img10.png
    [1] => img2.png
    [2] => img500.png
    [3] => img7.png
    [4] => img70.png
)

自然順ソート
Array
(
    [0] => img2.png
    [1] => img7.png
    [2] => img10.png
    [3] => img70.png
    [4] => img500.png
)

スポンサード リンク

カテゴリー: PHP, 文字列, 文字列比較, 組み込み関数 タグ: パーマリンク