トップページ
Laravel学習サイトLaravelやるばい

目次

PHPのexplodeとstrtok の違いについて簡単 なサンプルコードで解説

みなさんこんにちは、あべ いさぢです。

今回はPHPのexplodeとstrtok の違いについて簡単なサンプルコードで解説します。


explodeメソッドとは

対象の文字列に対して指定した文字で区切りをなくして文字列全てを配列の要素にします。

例えば下記のテキストがあったとします。

$text = "私の,名前は,あべ,です"

これを「,」で区切って「私の」・「名前は」・「あべ」・「です」を配列の要素にする時にexplode関数を使いますが書き方は下記になります。

explode(",", $text);

引数の役割は下記になります。

これで「私の」・「名前は」・「あべ」・「です」が配列の要素になります。

実際に確認します。

$text = "私の,名前は,あべ,です";

$change_text = explode(",", $text);

dd($change_text);


//結果
[
  (int) 0 => '私の',
  (int) 1 => '名前は',
  (int) 2 => 'あべ',
  (int) 3 => 'です',
]


explodeメソッドのデメリット

テキストに対して区切り文字を取って文字列全てを一気に配列の要素にしますが場合によっては特定の値だけ配列の要素にしたかったとします。

でもexplodeメソッドを使うと必要でない値も取得するので無駄が発生します。

配列の要素が少ないならいいですが仮に20個あったとすると何度もexplodeメソッドを使うと処理に時間がかかってくる場合があります。

こんな時はstrtokメソッドを使うと処理が軽くなります。


strtokメソッドとは

対象の文字列に対して指定した区切り文字を取るのはexplodeメソッドと同じですが区切りを取ったあとに文字列を1つずつ返し区切り文字がなくなるまで繰り返します。

例えば下記の文字列があったとします。

"apple,banana,orange";

strtokメソッドを使う時は下記の記述をします。

$text = "apple,banana,orange";

$token = strtok($text, ",");

while ($token !== false) {
    echo $token . "\n";
    $token = strtok(",");
}

最初appleの右側の「,」を取ってappleを返して次にbananaの右側の「,」を取ってbananaを返して次にorangeを返してorangeの右側には「,」がないのでここで動作が終了して「apple」・「banana」・「orange」を取得します。

strtokは値を1つずつ返すので特定の値を取得するのも可能です。

appleだけを取得するなら下記の記述をします。

$text = "apple,banana,orange";

$token = strtok($text, ",");

echo $token;

bananaだけを取得するなら下記の記述をします。

$text = "apple,banana,orange";

strtok($text, ",");      // ← appleを取得して使わずに捨てる
$banana = strtok(",");   // ← 次の値を取得

echo $banana;

orangeだけを取得するなら下記の記述をします。

$text = "apple,banana,orange";

strtok($text, ",");   // apple
strtok(",");          // banana
$orange = strtok(","); // orange

echo $orange;

「strtok(",");」を記述するたびに値を取得せずに次の値に移動ができます。

でも「strtok(",");」を何度も書くのは面倒だと思いませんか?

そんな場合は下記の記述をすればいいです。

$text = "apple,banana,orange";

$token = strtok($text, ",");

for ($i = 0; $i < 2; $i++) {
    $token = strtok(",");
}

echo $token;

これでorangeを取得します。


まとめ

ある文字列の区切りを取って特定の値を取得したいならexplodeメソッドよりもstrtokメソッドの方が読み込みが少なく済むと思います。












戻る