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 />";
?>
echo strnatcasecmp( 10, 5 ) . "<br />";
echo strnatcasecmp( 10, 10 ) . "<br />";
echo strnatcasecmp( 5, 10 ) . "<br />";
?>
↓↓↓出力結果↓↓↓
1
0
-1
0
-1
アルファベットを文字列比較
大文字と小文字を区別しない点に注目。
<?php
echo strnatcasecmp( "white", "black" ) . "<br />";
echo strnatcasecmp( "white", "white" ) . "<br />";
echo strnatcasecmp( "white", "WHITE" ) . "<br />";
echo strnatcasecmp( "black", "white" ) . "<br />";
?>
echo strnatcasecmp( "white", "black" ) . "<br />";
echo strnatcasecmp( "white", "white" ) . "<br />";
echo strnatcasecmp( "white", "WHITE" ) . "<br />";
echo strnatcasecmp( "black", "white" ) . "<br />";
?>
↓↓↓出力結果↓↓↓
1
0
0
-1
0
0
-1
ひらがなを文字列比較
<?php
echo strnatcasecmp( "やまだ", "たかはし" ) . "<br />";
echo strnatcasecmp( "やまだ", "やまだ" ) . "<br />";
echo strnatcasecmp( "たかはし", "やまだ" ) . "<br />";
?>
echo strnatcasecmp( "やまだ", "たかはし" ) . "<br />";
echo strnatcasecmp( "やまだ", "やまだ" ) . "<br />";
echo strnatcasecmp( "たかはし", "やまだ" ) . "<br />";
?>
↓↓↓出力結果↓↓↓
1
0
-1
0
-1
数字を自然順ソート
<pre>
<?php
$arrayA = array( 2, 10, 7, 500, 70 );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</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
)
(
[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>
<?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
)
(
[0] => Black
[1] => Blue
[2] => Green
[3] => Red
[4] => White
)
ひらがなを自然順ソート
<pre>
<?php
$arrayA = array( "こ", "か", "た", "わ", "い" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>
<?php
$arrayA = array( "こ", "か", "た", "わ", "い" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[0] => い
[1] => か
[2] => こ
[3] => た
[4] => わ
)
(
[0] => い
[1] => か
[2] => こ
[3] => た
[4] => わ
)
カタカナを自然順ソート
<pre>
<?php
$arrayA = array( "コ", "カ", "タ", "ワ", "イ" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>
<?php
$arrayA = array( "コ", "カ", "タ", "ワ", "イ" );
usort( $arrayA, "strnatcasecmp" );
print_r( $arrayA );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[0] => イ
[1] => カ
[2] => コ
[3] => タ
[4] => ワ
)
(
[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>
<?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
)
(
[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>
<?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
)
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>
<?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
)
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
)