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の方が速いですね。


関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ