Symfoware

Symfowareについての考察blog

PHP 文字列の最初の1文字が特定の文字であるか判定する(startsWith)

PHPで、文字列が「.」(ドット)で始まっているのか調べたい。

Pythonだと、startswithで調べられるのですが、


  1. ".abc".startswith(".")



PHPはこういった関数は用意されていないようです。





正規表現



最初に思いついたのは、正規表現を使用する方法です。


  1. <?php
  2. $s = '.a.bc';
  3. if (preg_match('/^\./', $s)) {
  4.     echo 'ok'.PHP_EOL;
  5. } else {
  6.     echo 'ng'.PHP_EOL;
  7. }



ただ、これだけのために正規表現を使うというのも...




substr



こちらを参考にさせていただきました。
[PHP] startsWith, endsWith を実装する


  1. <?php
  2. $s = '.a.bc';
  3. if (substr($s, 0, 1) === '.'){
  4.     echo 'ok'.PHP_EOL;
  5. } else {
  6.     echo 'ng'.PHP_EOL;
  7. }







比較



こんな感じで、実行速度の比較を行ってみました。


  1. <?php
  2. function t1($s) {
  3.     return preg_match('/^\./', $s);
  4. }
  5. function t2($s) {
  6.     return (substr($s, 0, 1) === '.');
  7. }
  8. $test = 100000;
  9. $s = '.abc';
  10. if (t1($s)) {
  11.     echo "t1:ok" . PHP_EOL;
  12. }
  13. if (t2($s)) {
  14.     echo "t2:ok" . PHP_EOL;
  15. }
  16. $time_start = microtime(true);
  17. for ($i = 0; $i < $test; $i++) {
  18.     t1($s);
  19. }
  20. $time = microtime(true) - $time_start;
  21. echo "{$time}秒" . PHP_EOL;
  22. $time_start = microtime(true);
  23. for ($i = 0; $i < $test; $i++) {
  24.     t2($s);
  25. }
  26. $time = microtime(true) - $time_start;
  27. echo "{$time}秒" . PHP_EOL;





結果は


t1:0.036633014678955秒
t2:0.025190830230713秒




やはりsubstrの方が速いですね。


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/10/24(土) 22:58:51|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<PHP assertで関数のテスト、assert_optionsでテストを無効にする | ホーム | PHP tmpfileで作成した一時ファイルに画像データを出力し、exif情報を取得する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1812-fc81a085
この記事にトラックバックする(FC2ブログユーザー)