php substrで文字列の一部を取得する

  • 作成日 2021.12.21
  • php
php substrで文字列の一部を取得する

phpで、substrを使用して、文字列の一部を取得するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

substr使い方

substrを使用すれば、文字列の一部を取得することが可能です。

substr(文字列 , 開始位置 [, 取得する文字数]);

以下は、文字列の一部を取得するサンプルコードとなります。

<?php

$str = 'abcde';

// 開始位置3文字目
echo substr($str, 2) . PHP_EOL;
// cde

// 開始位置4文字目
echo substr($str, 3) . PHP_EOL;
// de

マイナスを指定すると後ろから取得することが可能です。

<?php

$str = 'abcde';

// 開始位置 後ろから2文字
echo substr($str, -2) . PHP_EOL;
// de

// 開始位置 後ろから1文字
echo substr($str, -1) . PHP_EOL;
// e

取得する文字数を指定することも可能です。

<?php

$str = 'abcde';

// 開始位置 2文字目で2文字
echo substr($str, 1, 2) . PHP_EOL;
// bc

// 開始位置 2文字目で3文字
echo substr($str, 1, 3) . PHP_EOL;
// bcd

取得する文字数にマイナスを指定すると、削除されます。

<?php

// 開始位置 2文字目で最後の1文字を削除
echo substr($str, 1, -1) . PHP_EOL;
// bcd

日本語の場合は、マルチバイトなため結果がおかしくなります。

<?php

$str = 'あいうえお';

// 開始位置3文字目
echo substr($str, 2) . PHP_EOL;
// �いうえお

// 開始位置4文字目
echo substr($str, 3) . PHP_EOL;
// いうえお

mb_substr

日本語がある場合は「mb_substr」を使用します。

mb_substr(文字列 , 開始位置 [, 取得する文字数] [,エンコード]);

以下は、日本語が混ざった文字列の一部を取得するサンプルコードとなります。

<?php

$str = 'あいうえお';

// 開始位置3文字目
echo mb_substr($str, 2) . PHP_EOL;
// うえお

// 開始位置4文字目
echo mb_substr($str, 3) . PHP_EOL;
// えお

アルファベットでも「substr」と同じ結果が得られます。

<?php

$str = 'abcde';

// 開始位置3文字目
echo mb_substr($str, 2) . PHP_EOL;
// cde

// 開始位置4文字目
echo mb_substr($str, 3) . PHP_EOL;
// de

同じアルファベットであれば、当然パフォーマンスは「substr」の方がいいです。

【参考】 「substr」と「mb_substr」を1000万回同じコードを実行した結果

測定結果 : substr
process time: 2.82657 ミリ秒

測定結果 : mb_substr
process time: 3.09538 ミリ秒