関数の概要
PHPの strncmp 関数は、2つの文字列の先頭から指定した長さ分だけを比較するための関数です。文字列の完全一致を確認するのではなく、先頭のn文字だけを比較したい場合に便利です。主に文字列のプレフィックスを調べる際や部分的な比較を行いたい時に使われます。
パラメータの説明
string $str1: 比較対象の最初の文字列。string $str2: 比較対象の2番目の文字列。int $length: 比較する文字数。先頭からこの長さだけを比較します。
戻り値
strncmp は整数を返します。返り値の意味は以下の通りです。
- 0 : 2つの文字列の先頭
$length文字が等しい場合 - 0より小さい値 :
$str1の先頭$length文字が$str2より辞書順で小さい場合 - 0より大きい値 :
$str1の先頭$length文字が$str2より辞書順で大きい場合
使用例
基本的な使い方
<?php
$str1 = "applepie";
$str2 = "applecrisp";
$result = strncmp($str1, $str2, 5);
if ($result === 0) {
echo "先頭5文字は一致しています。";
} else {
echo "先頭5文字は一致していません。";
}
?>
この例では、両方の文字列の先頭5文字「apple」を比較しています。結果が0なので一致していることがわかります。
プレフィックスの判定に使う例
<?php
$text = "hello world";
$prefix = "hello";
if (strncmp($text, $prefix, strlen($prefix)) === 0) {
echo "文字列は「" . $prefix . "」で始まります。";
} else {
echo "文字列は「" . $prefix . "」で始まりません。";
}
?>
文字列が指定したプレフィックスで始まるかどうかを判定しています。strlen で比較文字数を動的に取得している点もポイントです。
大文字・小文字を区別した比較
<?php
$strA = "Cat";
$strB = "cat";
var_dump(strncmp($strA, $strB, 3)); // 大文字・小文字を区別するため0にならない
?>
strncmp は大文字・小文字を区別して比較するため、「Cat」と「cat」は異なる文字列として扱われます。区別したくない場合は別の関数を検討してください。
関連する関数
strcmp: 文字列全体を比較する関数。strncasecmp: 大文字・小文字を区別せずに先頭n文字を比較する関数。strncmpの逆で全文字列を小文字化してから比較する方法もよく使われます。
まとめ
strncmp はPHPで文字列の先頭から指定した文字数だけを比較する際に非常に便利な関数です。文字列のプレフィックスチェックや部分的な一致判定など、シンプルで効率的な比較処理を実現できます。大文字・小文字を区別する点には注意し、必要に応じて他の関連関数と使い分けてください。
