Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
strcmp() / strcasecmp()対応: PHP 4(2000)
2つの文字列を比較し、一致しているかどうかや大小関係を判定します。大文字・小文字を区別しない比較や自然順での比較にも対応しています。
構文
// バイナリセーフで文字列を比較します。 strcmp($string1, $string2); // 大文字・小文字を区別せずに比較します。 strcasecmp($string1, $string2); // 自然順アルゴリズムで比較します。 strnatcmp($string1, $string2); // 2つの文字列の類似度を計算します。 similar_text($string1, $string2, &$percent);
関数一覧
| 関数 | 概要 |
|---|---|
| strcmp($string1, $string2) | 2つの文字列をバイナリセーフで比較します。$string1 が小さければ負の値、等しければ『0』、大きければ正の値を返します。 |
| strcasecmp($string1, $string2) | 大文字・小文字を区別せずに比較します。戻り値の規則は『strcmp()』と同じです。 |
| strnatcmp($string1, $string2) | 自然順アルゴリズムで比較します。数字の部分を数値として解釈するため、人間にとって自然な並び順になります。 |
| similar_text($string1, $string2, &$percent) | 2つの文字列の一致する文字数を返します。第3引数に変数を渡すと類似度がパーセントで格納されます。 |
戻り値
『strcmp()』『strcasecmp()』『strnatcmp()』は、$string1 が小さければ負の値、等しければ『0』、大きければ正の値を返します。『similar_text()』は一致する文字数を整数で返します。
サンプルコード
<?php
// strcmp() で文字列を比較します。
echo strcmp("abc", "abc"); // 等しいため『0』と出力されます。
echo strcmp("abc", "def"); // 『abc』の方が小さいため負の値が出力されます。
echo strcmp("def", "abc"); // 『def』の方が大きいため正の値が出力されます。
// strcasecmp() は大文字・小文字を区別しません。
echo strcasecmp("Hello", "hello"); // 等しいため『0』と出力されます。
echo strcasecmp("PHP", "php"); // 等しいため『0』と出力されます。
// strnatcmp() は数字を数値として比較します。
echo strcmp("file2", "file10"); // 辞書順では『file2』の方が大きいため正の値が出力されます。
echo strnatcmp("file2", "file10"); // 自然順では『file2』の方が小さいため負の値が出力されます。
// 自然順ソートの活用例です。
$files = ["file10.txt", "file2.txt", "file1.txt", "file20.txt"];
usort($files, "strnatcmp");
var_dump($files); // array("file1.txt", "file2.txt", "file10.txt", "file20.txt") と自然な順序で並びます。
// similar_text() で類似度を計算します。
$percent = 0;
$matched = similar_text("プログラミング", "プログラム", $percent);
echo $matched; // 一致する文字数が出力されます。
echo round($percent, 1) . "%"; // 類似度がパーセントで出力されます。
// パスワードの一致確認には === を使います。
$input = "MyPassword123";
$stored = "MyPassword123";
if ($input === $stored) {
echo "パスワードが一致しました。"; // 厳密比較で安全に判定できます。
}
概要
『strcmp()』は2つの文字列をバイト単位で比較する関数です。等しければ『0』、$string1 の方が辞書順で前なら負の値、後なら正の値を返します。大文字・小文字を区別しない比較には『strcasecmp()』を使用してください。
『strnatcmp()』は数字の部分を数値として解釈する自然順アルゴリズムで比較します。通常の辞書順では「file10」が「file2」より前に来てしまいますが、自然順では「file2」「file10」の順に正しく並びます。ファイル名やバージョン番号のソートに便利です。
『similar_text()』は2つの文字列がどれだけ似ているかを計算する関数で、あいまい検索や入力候補の提案に活用できます。文字列の検索には『strpos()』、大文字・小文字の変換には『strtolower() / strtoupper()』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。