php strcmpを使って同じ文字列であるかを判定する

  • 作成日 2021.11.26
  • php
php strcmpを使って同じ文字列であるかを判定する

phpで、strcmpを使用して、同じ文字列であるかを判定するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Linux release 8.0.1905 (Core)
  • php 8.0.0
  • nginx 1.14.1

strcmp使い方

strcmpを使用すれば、同じ文字列であるかを判定することが可能です。

strval(変数);

【戻り値】
文字数が第一引数より第二引数が大きい場合は < 0
文字数が第一引数より第二引数が小さい場合は > 0
第一引数と第二引数が同じの場合は 0

以下は、同じ文字列であるかを判定するサンプルコードとなります。

<?php

echo (strcmp('mebee','mebee') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcmp('あいうえお','あいうえお') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcmp('mebee','Mebee') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcmp('mebee','me') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcmp('10','10') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcmp('10','10.0') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcmp('10','010') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcmp('10','1e1') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcmp('10',10) == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです

大文字と小文字は区別されて、数値と文字列は区別されません。

大文字と小文字を区別して、異なるという判定が必要な場合は「strcasecmp」を使用します。その他の結果は同じになります。

<?php

echo (strcasecmp('mebee','mebee') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcasecmp('あいうえお','あいうえお') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcasecmp('mebee','Mebee') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcasecmp('mebee','me') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcasecmp('10','10') == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo (strcasecmp('10','10.0') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcasecmp('10','010') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcasecmp('10','1e1') == 0 ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo (strcasecmp('10',10) == 0 ? '同じです' : '異なります').PHP_EOL;
// 同じです

数値と文字列を比較して、異なるという判定が必要な場合は「===」演算子を使用します。その他の結果は同じになります。

<?php

echo(('mebee' === 'mebee') ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo(('あいうえお' === 'あいうえお') ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo(('mebee' === 'Mebee') ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo(('mebee' === 'me') ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo(('10' === '10') ? '同じです' : '異なります').PHP_EOL;
// 同じです
echo(('10' === '10.0') ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo(('10' === '010') ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo(('10' === '1e1') ? '同じです' : '異なります').PHP_EOL;
// 異なります
echo(('10' === 10) ? '同じです' : '異なります').PHP_EOL;
// 異なります

また、文字列の比較は「===」を使用した方がパフォーマンスは遥かにいいです。

【参考】 同じコードを1000万回実行した結果

測定結果 : strcmp
process time: 2.79246 ミリ秒

測定結果 : ===
process time: 0.53891 ミリ秒