文字列を操作するPHPの便利な関数

PHPでは、値を文字列型で扱うことが非常に多いです。そのため、PHPには文字列を操作する便利な関数がたくさん定義されています。これらの関数を利用することで、より効率的に開発を行うことができます。

文字列の長さを返す strlen(), mb_strlen()

strlen(), mb_strlen()は、第1引数で渡された文字列の長さを返します。mb_strlen()の第2引数には文字コードを指定しますが、省略した場合はmbstring.internal_encodingの値が使用されます。strlen()では、マルチバイトの文字数を正しくカウントできませんが、mb_strlen()はマルチバイトの文字列にも対応しています。

PHP

<?php
$str = 'あいうえおabcde';
echo strlen($str), PHP_EOL; // 出力:20
echo mb_strlen($str, 'UTF-8'), PHP_EOL; // 出力:10
?>

文字列の一部を抜き出す substr(), mb_substr()

substr(), mb_substr()は、第1引数で渡された文字列の一部を抜き出して返します。第2引数は開始位置、第3引数は文字数を指定しますが省略した場合は文字列の最後までとなります。第2,3引数で負の値を指定した場合、文字列の最後から数えた位置になります。mb_substr()は、マルチバイト文字にも対応しており、第4引数で文字コードを指定しますが、省略した場合はmbstring.internal_encodingの値が使用されます。

PHP

<?php
$str1 = 'abcdefghij';
echo substr($str1, 5), PHP_EOL; // 出力:fghij
echo substr($str1, 1, 3), PHP_EOL; // 出力:bcd
echo substr($str1, -4, 2), PHP_EOL; // 出力:gh
echo substr($str1, 4, -2), PHP_EOL; // 出力:efgh
echo substr($str1, -3, -1), PHP_EOL; // 出力:hi

$str2 = 'あいうえおabcde';
echo mb_substr($str2, 4), PHP_EOL; // 出力:おabcde
echo mb_substr($str2, 1, 5), PHP_EOL; // 出力:いうえおa
echo mb_substr($str2, -6, 5), PHP_EOL; // 出力:おabcd
echo mb_substr($str2, 2, -4, 'UTF-8'), PHP_EOL; // 出力:うえおa
echo mb_substr($str2, -7, -3, 'UTF-8'), PHP_EOL; // 出力:えおab
?>

文字列内で指定した文字列が最初に現れる位置を返す strpos(), mb_strpos()

strpos()は、第1引数で渡した文字列の中から第2引数で渡した文字列が最初に現れる位置を整数値で返します。見つからなかった場合はfalseが返されます。第3引数は省略可能で検索を開始する位置を指定できます。mb_strpos()は、マルチバイト文字にも対応しており、第4引数で文字コードを指定できますが、省略した場合はmbstring.internal_encodingの値が使用されます。

PHP

<?php
$str = 'abcdefg';
$pos = strpos($str, 'c');
var_dump($pos); // 出力:int(2)
$pos = strpos($str, 'b', 2);
var_dump($pos); // 出力:bool(false)

$str = 'abcdeあいうえお';
$pos = mb_strpos($str, 'あ', 0, 'UTF-8');
var_dump($pos); // 出力:int(5)
?>

文字列の端から指定した文字を取り除く trim(), ltrim(), rtrim()

trim()は、第1引数で渡された文字列の端から、第2引数で渡された文字を取り除いて返します。第2引数を省略した場合は、" ", "\t", "\n", "\r", "\0", "\x0B"が取り除かれます。ltrim()は文字列の左端からのみ、rtrim()は文字列の右端からのみ処理します。

PHP

<?php
$str1 = "\t Hello world. \r\n";
var_dump(trim($str1)); // 出力:string(12) "Hello world."
var_dump(trim($str1, "\t\r\n Hel.")); // 出力:string(7) "o world"

$str2 = "Hello world.";
var_dump(ltrim($str2, "Helld.")); // 出力:string(8) "o world."
var_dump(rtrim($str2, "Helld.")); // 出力:string(9) "Hello wor"
?>

長い文字列を省略する mb_strimwidth()

mb_strimwidth()は、第1引数で渡された文字列を省略して返します。第2引数に開始位置、第3引数に文字列の総バイト数、第4引数に文字列の最後に追加する文字列を指定します。第5引数は文字コードになりますが、省略した場合はmbstring.internal_encodingの値が使用されます。

PHP

<?php
$str = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん';
echo mb_strimwidth($str, 0, 33, '...続きを読む', 'UTF-8');
// 出力;あいうえおかきくけこ...続きを読む
?>

配列を文字列として連結する implode()

implode()は、配列を文字列として連結して返します。第1引数で連結の際の区切り文字、第2引数で配列を渡します。

PHP

<?php
$array = array(1, 2, 3, 4, 5);
echo implode(',', $array); // 出力:1,2,3,4,5
?>

文字列を指定した区切り文字で分割して配列で返す explode()

explode()は、文字列を指定した区切り文字で分割して配列で返します。第1引数で区切り文字を指定し、第2引数で対象となる文字列を指定します。第3引数は省略可能ですが、数値を指定することで返される配列の最大要素数を指定することができます。この場合、配列の最後の要素は残りのすべての文字列を含みます。

PHP

<?php
$str = 'ab/cd/ef/gh';
$array = explode('/', $str, 3);
var_dump($array);
/* 出力:
array(3) {
  [0]=>
  string(2) "ab"
  [1]=>
  string(2) "cd"
  [2]=>
  string(5) "ef/gh"
}
*/
?>

文字列を文字数で分割して配列で返す str_split()

str_split()は、文字列を文字数で分割して配列で返します。第1引数で対象となる文字列を渡し、第2引数で分割する文字数を指定します。第2引数のデフォルト値は1となっており、省略した場合は1文字ずつに分割された配列となります。

PHP

<?php
$str = 'abcdef';
$array = str_split($str, 2);
var_dump($array);
/* 出力:
array(3) {
  [0]=>
  string(2) "ab"
  [1]=>
  string(2) "cd"
  [2]=>
  string(2) "ef"
}
*/
?>

URL文字列を分解して連想配列で返す parse_url()

parse_url()は、引数で受け取ったURL文字列を構成要素毎に分解して、連想配列で返します。

PHP

<?php
$url = 'http://kudox.jp/foo/hoge.html?id=1#jump3';
var_dump(parse_url($url));
/* 出力:
array(5) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(8) "kudox.jp"
  ["path"]=>
  string(14) "/foo/hoge.html"
  ["query"]=>
  string(4) "id=1"
  ["fragment"]=>
  string(5) "jump3"
}
*/
?>

数値をフォーマットする number_format()

number_format()は、数値を1000の位毎に区切り文字を入れて文字列として返します。第1引数に数値、第2引数に小数点以下の桁数、第3引数に小数点の区切り文字、第4引数に1000の位毎の区切り文字を渡します。第2引数以降は省略可能です。

PHP

<?php
$num = 123456789;
echo number_format($num), PHP_EOL; // 出力:123,456,789
echo number_format($num, 3), PHP_EOL; // 出力:123,456,789.000
echo number_format($num, 3, ',', ' '), PHP_EOL; // 出力:123 456 789,000
?>