tech.chakapoko.com
Home / PHP / 文字列

[PHP]文字列を分割する

指定した文字列で分割する

explode 関数を使う

explode 関数を使うと指定した文字列で文字列を分割することができます。

<?php
$sentence = 'PHP is a popular general-purpose scripting language';

$words = explode(' ', $sentence);

foreach ($words as $word) {
    echo $word . "\n";
}

このコードを実行すると次のような出力が得られます。

PHP
is
a
popular
general-purpose
scripting
language

strtok 関数を使う

explode 関数を使うと指定した文字列で文字列を分割することができます。

<?php
$sentence = 'PHP is a popular general-purpose scripting language';

$token = strtok($sentence, ' ');

echo $token . "\n";

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

このコードを実行すると次のような出力が得られます。

PHP
is
a
popular
general-purpose
scripting
language

CSV文字列をパースする

カンマ区切りのCSV文字列の場合は str_getcsv 関数が使えます。

<?php
$data = "a,b,c";
$csv = str_getcsv($data);
var_dump($csv);

このコードを実行すると以下のような出力が得られます。

array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}

正規表現で分割する

preg_match 関数を使うと正規表現を使って文字列を分割することができます。

次のコードは a,b c.d という文字列を、',' または ' ' または '.' と言う文字で分割する例です。

<?php
$data = 'a,b c.d';
$chunks = preg_split('/[, .]/', $data);
var_dump($chunks);

このコードを実行すると結果は次のようになります。

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}

指定した位置で切り取る

文字列を指定した位置で分割するには substr 関数を使います。

substr 関数の第1引数には分割する文字列を、第2引数には何文字目から分割するかを、第3引数には何文字切り取るかを指定します。

第3引数を省略するとその位置から最後までを切り取ります。

<?php
$sentence = 'PHP is a popular general-purpose scripting language';

echo substr($sentence, 0, 5); // => 'PHP 1'
echo substr($sentence, 5, 5); // => 's a p'
echo substr($sentence, 5);    // => 's a popular general-purpose scripting language'

substr 関数は日本語などのマルチバイト文字列には対応していません。実際に実行してみると文字化けが発生するのがわかります。

<?php
$sentence = 'PHPは人気の汎用プログラミング言語です。';

echo substr($sentence, 0, 5); // => 'PHP�'
echo substr($sentence, 5, 5); // => '�人�'
echo substr($sentence, 5);    // => '�人気の汎用プログラミング言語です。'

マルチバイト文字列に対しては代わりに mb_substr 関数を使います。

$sentence = 'PHPは人気の汎用プログラミング言語です。';

echo mb_substr($sentence, 0, 5); // => 'PHPは人'
echo mb_substr($sentence, 5, 5); // => '気の汎用プ'
echo mb_substr($sentence, 5);    // => '気の汎用プログラミング言語です。'

指定した長さで分割する

str_split 関数を使う

str_split 関数を使うと文字列を一定の長さに分割し、配列として返します。

<?php
$sentence = 'PHP is a popular general-purpose scripting language that is especially suited to web development. Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.';

$chunks = str_split($sentence, 30);

foreach ($chunks as $chunk) {
    echo $chunk . "\n";
}

このコードの実行結果は次の通りです。

PHP is a popular general-purpo
se scripting language that is 
especially suited to web devel
opment. Fast, flexible and pra
gmatic, PHP powers everything 
from your blog to the most pop
ular websites in the world.

chunk_split 関数を使う

chunk_split 関数でも文字列を一定の長さに分割できますが、結果は配列ではなく改行がはさみ込まれた文字列になります。

<?php
$sentence = 'PHP is a popular general-purpose scripting language that is especially suited to web development. Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.';

$chunks = chunk_split($sentence, 30);
echo $chunks;

マルチバイト文字列への対応

chunk_split 関数は日本語などのマルチバイト文字列では正しく動作しません。

マルチバイト文字列の場合は mb_* 系の関数を使って実装する必要があります。

次のコードはマルチバイト文字列でも動作する mb_str_split 関数の実装例です。

<?php
function mb_str_split($sentence, $length) {
    $tmp = $sentence;
    $chunks = [];
    while (true) {
        if (mb_strlen($tmp) <= $length) {
            $chunks[] = $tmp;
            break;
        }

        $chunk = mb_substr($tmp, 0, $length);
        $tmp = mb_substr($tmp, $length);
        $chunks[] = $chunk;
    }
    return $chunks;
}

$sentence = 'PHP は、"PHP: Hypertext Preprocessor" を意味し、広く使用されているオープンソースの汎用スクリプト言語です。 HTML に埋め込むことができ、Web アプリケーションの開発に特に適しています。 PHP の構文の多くは C、Java、Perl 言語から転用したもので、 簡単に習得することができます。この言語は、動的に生成されるウェブページを Web 開発者が速やかに作成できるようにすることを主な目標として つくられました。しかし、それだけにとどまらず、 もっと多くのことを PHP を使って行うことができます。';

$chunks = mb_str_split($sentence, 30);
foreach ($chunks as $chunk) {
    echo $chunk . "\n";
}

このコードを実行すると以下のような出力が得られます。

PHP は、"PHP: Hypertext Preproce
ssor" を意味し、広く使用されているオープンソースの汎用
スクリプト言語です。 HTML に埋め込むことができ、Web
 アプリケーションの開発に特に適しています。 PHP の構文
の多くは C、Java、Perl 言語から転用したもので、 
簡単に習得することができます。この言語は、動的に生成されるウ
ェブページを Web 開発者が速やかに作成できるようにするこ
とを主な目標として つくられました。しかし、それだけにとどま
らず、 もっと多くのことを PHP を使って行うことができま
す。