文字列


文字数を数える(mb_strlen)

mb_strlen()を使います。エンコード正しく指定しないと正確な文字数を得られません。

$val = "abcde\n";
echo mb_strlen($val) . "\n";    // => 6
echo mb_strlen($val, "utf-8") . "\n";    // => 6
$val = "あいうえお\n";
echo mb_strlen($val) . "\n";    // => 16
echo mb_strlen($val, "utf-8") . "\n";    // => 6

書いたままの文字列を作る(ヒアドキュメント)

<<<[適当なID] … [適当なID]のような形で書きます。<br>ヒアドキュメントの中で変数を使用することも出来ます。

$str = "xyz";
$val = <<<EOS
    a
       b$str
  c
EOS;
echo "$val\n";
// =>
//    a
//       bxyz
//  c

ヒアドキュメントで変数などをparseしたくない場合はIDをシングルクォーテーションでくくります。

$val = <<<'EOS'
    a
       b$str
  c
EOS;
echo "$val\n";
// =>
//    a
//       b$str
//  c

文字列中の変数を展開する

ダブルクオーテーションに挟まれた変数は展開されて評価されます。

$val = "ABCDE";
echo "abcde$val" . "\n";    // => abcdeABCDE

しかし文字列によっては変数との境がわからない場合があるので、範囲を{}で指定します。
うまく評価されない場合はそのあとの文字列が消されてしまうので、基本的には{}で囲んでおくことをお勧めします。

$val = "ABCDE";
echo "abcde$valabcde" . "\n";    // => abcde
echo "abcde${val}abcde" . "\n";    // => abcdeABCDEabcde

連結する

[.]で文字列をつなげて書きます。

$val = "a";
$val = $val . "b";
$val .= "c";
echo  "$val\n";    // => abc

置き換える(str_replace)

str_replace(置き換え前,置き換え後,対象文字列)を使います。
str_place()の置き換えは配列を使うことで複数の置き換えも可能です。

$val = "abcdefgabcdefg\n";
echo str_replace("abc", "ABC", $val);    // => ABCdefgABCdefg
// 配列を使用
echo str_replace(array("bc", "ef"), array("BC", "EF"), $val);    // => aBCdEFgaBCdEFg
echo str_replace(array("bc", "ef"), "XX", $val);    // => aXXdXXgaXXdXXg

先頭、末尾の文字を取り除く(trim)

両サイドはtrim(),左サイドはltrim(),右サイドはrtrim()を使います。取り除く文字は複数指定することも出来ます。

$val = '--abcba--';
echo trim($val, '-') . "\n";    // => abcba
echo rtrim($val, '-') . "\n";    // => --abcba
echo ltrim($val, '-') . "\n";    // => abcba--

// 複数文字列取り除く
echo trim($val, '-a') . "\n";    // => bcb
echo rtrim($val, '-a') . "\n";    // => --abcb
echo ltrim($val, '-a') . "\n";    // => bcba--

文字列の英字を大文字にする(strtouppper)

strtouppper()を使用することで大文字にすることができます。数字などはそのままです。

$val = 'Anyone who stops learning is old, whether at 20 or 80. ';
echo strtoupper($val) . "\n";    // => ANYONE WHO STOPS LEARNING IS OLD, WHETHER AT 20 OR 80. 

文字列の英字を小文字にする(strtolower)

strtolower()を使用することで小文字にすることができます。数字などはそのままです。

$val = 'Anyone who stops learning is old, whether at 20 or 80. ';
echo strtolower($val) . "\n";    // => anyone who stops learning is old, whether at 20 or 80. 

部分文字列を取り出す(strstr,stristr,substr)

文字基準で取り出す場合
strstr()を使用します。strstr(対象文字列, 取り出す基準文字, 基準文字より前を返すかどうか)
対象文字列から最初に見つけた基準文字から部分文字列を返します。

$val = 'abcdefgABC';
echo strstr($val, 'c') . "\n";    // => cdefgABC
echo strstr($val, 'c', true) . "\n";    // => ab
echo strstr($val, 'de') . "\n";    // => defgABC
echo strstr($val, 'de', true) . "\n";    // => abc
echo strstr($val, 'B') . "\n";    // => BC
echo strstr($val, 'B', true) . "\n";    // => abcdefgA

大文字と小文字を区別しない場合はstristr()を使用します。

$val = 'abcdefgABC';
echo stristr($val, 'c') . "\n";    // => cdefgABC
echo stristr($val, 'c', true) . "\n";    // => ab
echo stristr($val, 'de') . "\n";    // => defgABC
echo stristr($val, 'de', true) . "\n";    // => abc
echo stristr($val, 'B') . "\n";    // => bcdefgABC
echo stristr($val, 'B', true) . "\n";    // => a

文字数基準で取り出す場合
substr()を使用します。substr(対象文字列, 取り出す開始位置, 取り出す長さ(省略可))

$val = 'abcdefgABC';
echo substr($val, 3) . "\n";    // => defgABC
echo substr($val, 3, 2) . "\n";    // => de
echo substr($val, -3) . "\n";    // => ABC
echo substr($val, -3, 2) . "\n";    // => AB
echo substr($val, 3, 20) . "\n";    // => defgABC (文字数をオーバーすると取り出せるだけ取る)

文字列を1文字ずつ処理する

文字列を配列のように処理することで1文字ずつ処理することができます。

$str = "abcd";
$len = mb_strlen($str);
for($i=0 ; $i<$len ; $i++){
    echo $str[$i] . "\n";
}
//    => a
//    => b
//    => c
//    => d

文字列の中に特定の文字列が含まれるかどうか(substr_count)

substr_count()を使います。substr_count(検索対象文字列, 検索文字列, 開始位置からのオフセット, 検索する文字数)

$str = "abcdefgabc";
echo substr_count($str, 'a') . "\n";    // => 2
echo substr_count($str, 'ab') . "\n";    // => 2
echo substr_count($str, 'cd') . "\n";    // => 1
echo substr_count($str, 'ab', 3) . "\n";    // => 1
echo substr_count($str, 'ab', 3, 4) . "\n";    // => 0

比較する(strcmp)

strcmp()を使います。戻り値は以下のようになります。
第一引数=第二引数=0
第一引数>第二引数=正
第一引数<第二引数=負
となります。ただし、文字列が違う場合は違う文字との文字コードの差が返されるようです。

$val = "abc";
echo  strcmp($val, "abc") . "\n";    // => 0
echo  strcmp($val, "abcde") . "\n";    // => -2
echo  strcmp($val, "a") . "\n";    // => 2
echo  strcmp($val, "aa") . "\n";    // => 1
echo  strcmp($val, "as") . "\n";    // => -17
echo  strcmp($val, "assss") . "\n";    // => -17

文字数を指定して比較する(strncmp)

strncmp()を使います。strncmp(文字列1, 文字列2, 比較文字数)
戻り値は「比較する」項目と同じです。

$val = "abcabc";
echo  strncmp($val, "a", 3) . "\n";    // => 2 (2文字少ない)
echo  strncmp($val, "abc", 5) . "\n";    // => 2 (2文字少ない)
echo  strncmp($val, "abc", 4) . "\n";    // => 1 (1文字少ない)
echo  strncmp($val, "abc", 3) . "\n";    // => 0 (同じ)
echo  strncmp($val, "abca", 4) . "\n";    // => 0 (同じ)
echo  strncmp($val, "aba", 3) . "\n";    // => 2
echo  strncmp($val, "abz", 3) . "\n";    // => -23
echo  strncmp($val, "abcz", 4) . "\n";    // => -25
echo  strncmp($val, "abcyz", 5) . "\n";    // => -24
echo  strncmp($val, "abcaz", 5) . "\n";    // => -24

指定したフォーマットで文字列を作る(sprintf,vsprintf)

sprintf(),vsprintf()を使用します。sprintf()は可変長引数、vsprintf()は配列を使用します。

$val = 75;
echo sprintf("%b \n", $val);    // => 1001011 (2進数)
echo sprintf("%c \n", $val);    // => K (ascii文字)
echo sprintf("%d \n", $val);    // => 75 (整数)
echo sprintf("%e \n", $val);    // => 7.500000e+1 (科学記法)
echo sprintf("%u \n", $val);    // => 75 (符号なし整数)
echo sprintf("%f \n", $val);    // => 75.000000 (doubleの浮動小数点数)
echo sprintf("%F \n", $val);    // => 75.000000 (floatの浮動小数点数)
echo sprintf("%o \n", $val);    // => 113 (8進数)
echo sprintf("%s \n", $val);    // => 75 (文字列)
echo sprintf("%x \n", $val);    // => 4b (16進数小文字)
echo sprintf("%X \n", $val);    // => 4B (16進数大文字)
$val = -75;
echo sprintf("%u \n", $val);    // => 18446744073709551541 (符号なし整数)

$val = array(75);
echo vsprintf("%b \n", $val);    // => 1001011 (2進数)
echo vsprintf("%c \n", $val);    // => K (ascii文字)
echo vsprintf("%d \n", $val);    // => 75 (整数)
echo vsprintf("%e \n", $val);    // => 7.500000e+1 (科学記法)
echo vsprintf("%u \n", $val);    // => 75 (符号なし整数)
echo vsprintf("%f \n", $val);    // => 75.000000 (doubleの浮動小数点数)
echo vsprintf("%F \n", $val);    // => 75.000000 (floatの浮動小数点数)
echo vsprintf("%o \n", $val);    // => 113 (8進数)
echo vsprintf("%s \n", $val);    // => 75 (文字列)
echo vsprintf("%x \n", $val);    // => 4b (16進数小文字)
echo vsprintf("%X \n", $val);    // => 4B (16進数大文字)
$val = array(-75);
echo vsprintf("%u \n", $val);    // => 18446744073709551541 (符号なし整数)

文字列を特定文字区切りで配列にする(explode)

explode()を使います。

$val = "a,b,c,d";
$ary = explode(',', $val);
foreach($ary as $a){ echo "$a "; }    // => a b c d