文字列操作

文字列の操作

文字列を出力する

echoprintは、文字列を出力します。

echo string
print(string)

echoとprintによる文字列出力

    <?php
        echo "おはようございます花子さん。<br />¥n";
        print ( "おはよう、山田さん。¥n" );
    ?>
    

実行結果

おはようございます花子さん。
おはよう、山田さん。

上記のスクリプトにより文字列が出力されることがわかります。

「文字列を出力する」という点で「echo」と「print」はほぼ同じ動作をします。ですが、違いはあります。

  • echoはカンマ「,」で区切り複数の文字列を指定できるのに対し、printはできない。
  • printは結果を返すが、echoは返さない。

カンマ区切りで文字列を複数指定し、printで出力

    <?php
        print ( "Hello", "World" );
    ?>
    
    

実行結果

Parse error: syntax error, unexpected ',' in C:\xampp\htdocs\php5sample\print.php on line 2

ファイル名やファイルまでのパスのURL、エラーを起こしている行数の違いはあっても、構文誤りでエラーが出るはずです。

カンマ区切りで文字列を複数指定し、echoで出力

    <?php
        echo "Hello", "World";
    ?>
    

実行結果

HelloWorld

「HelloWorld」が出力されているのがわかります。

変数$outに代入し、printで出力

    <?php
        $out = print ( "HelloWorld" );
    ?>
    

実行結果

HelloWorld

「HelloWorld」が出力され、結果が返っていることがわかります。

変数$outに代入し、echoで出力

    <?php
        $out = echo "HelloWorld";
    ?>
    

実行結果

Parse error: syntax error, unexpected T_ECHO in C:\xampp\htdocs\php5sample\echo.php on line 2

ファイル名やファイルまでのパスのURL、エラーを起こしている行数の違いはあっても、構文誤りでエラーが出るはずです。

文字列の長さを調べる

strlen()関数は、引数の文字列の長さを取得します。

strlen(string)

半角英数字の長さを取得する

    <?php
        echo strlen( "abc123" );
    ?>
    

実行結果

6

上記スクリプトの文字列のバイト数は1なので、6となります。

下記スクリプトでは日本語の文字列を取得しています。

日本語の文字列の長さを取得

    <?php
        echo strlen( "あいうえおかきくけこ" );
    ?>
    

実行結果

20

上記スクリプトの文字列のバイト数は2なので、20となります。

文字列を分割する

explode()関数は、引数の文字列を指定する文字列または文字で分割することができます。このとき、分割をした値は配列となります。

explode(string_separator,string)

「"|"」の文字で文字列を分割

    <?php
        $str = explode( "|", "abc|defg" );
        var_dump($str);
    ?>
    

実行結果

array(2) { [0]=> string(3) "abc" [1]=> string(4) "defg" }

var_dumpにより、$strがどのようになっているかを確認してみます。

「array(2)」は「"|"」の文字により、「"abc"」と「"defg"」の二つに区切られたので要素の数で「2」となります。以上から、指定された文字により文字列が分割されたことがわかります。

文字列の一部分を取り出す

substr()関数は、文字列から指定したバイト分の文字列を取得します。

substr(string,start,[length])

先頭から4文字目以降を取得

    <?php
        $str = substr("PHP Product",4);
        echo "$str";
    ?>
    

実行結果

Product

substr("PHP Product",4);の「4」は先頭から4文字目以降の文字を取得することを表しています。

先頭から4文字目以降4文字を取得する

    <?php
       $str = substr( "PHP Product", 4, 4 );
       echo "$str";
    ?>
    

実行結果

Prod

substr("PHP Product",4,4);の「4,4」は先頭から4文字目以降4文字を取得することを意味しています。

ここではすなわち、PHP ProductのProdを取得しています。

末尾から4文字目以降4文字を取得する

    <?php
        $str = substr( "PHP Product", -4, 4 );
        echo "$str";
    ?>
    

実行結果

duct

substr("PHP Product",-4,4);の「-4,4」は末尾(「-4」が末尾から4文字目を意味)から4文字目以降4文字を取得することを意味しています。

ここではすなわち、PHP Productのductを取得しています。

エスケープ文字を処理する

addslashes()関数は、エスケープ文字を処理します。「'(シングルクォーテーション)」、「"(ダブルクォーテーション)」、「¥(バックスラッシュ)」、NULLの文字の前に¥(バックスラッシュ)を挿入した文字列を返します。

addslashes(string)

エスケープ文字を処理する

    <?php
        $str = "abc 'de";
        echo addslashes($str);
    ?>
    

実行結果

abc ¥'de

「'」の前に¥が挿入されていることがわかります。この¥によって「'」のPHPにとっての意味が処理され、通常の文字列としての「'」が適用されます。

文字列の書式を整える

printf()関数sprintf()関数は、引数の文字列の書式を変換することができます。ですが、printf()関数とsprintf()関数はそれぞれ役割が違い、printf()関数はブラウザに出力するのに対し、sprintf()関数はブラウザには出力せず、変数へ返します。

printf(format,[args]);
sprintf(format,[args]);

文字列の書式を整形する

    <?php
        $y = 2004;
        $m = 8;
        $d = 1;

        printf( "%04d-%02d-%02d", $y, $m, $d );
    ?>
    

実行結果

2004-08-01

printf("%04d-%02d-%02d",$y,$m,$d);の%dは文字を出力することを表します。04は桁数を意味し、ここでは4桁の2004を出力します。次はsprintf()で実行してみます。

    <?php
        $y = 2004;
        $m = 8;
        $d = 1;

        $sp = sprintf("%04d-%02d-%02d",$y,$m,$d);

        echo ("$sp");

    ?>
    

実行結果

2004-08-01

sprintf()は変数に値を返すので、「$sp = sprintf("%04d-%02d-%02d",$y,$m,$d);」のように一度、変数に代入してからでないとブラザウに出力することができません。

文字列の空白を削除する

trim()関数は、指定した文字列の先頭、および末尾から空白を取り除きます。

string trim( string str [, string charlist ] )
string trim( 文字列 [, 削除したい文字リスト ] )

文字列の空白を削除する

    <?php

        $str1 = "(" . trim( " abc " ) . ")";
        $str2 = "(" . rtrim( " abc " ) . ")";
        $str3 = "(" . ltrim( " abc " ) . ")";
        $str4 = "(" . trim( "-abc-", "-" ) . ")";

        echo "$str1<br />\n";
        echo "$str2<br />\n";
        echo "$str3<br />\n";
        echo "$str4<br />\n";
    ?>
    

実行結果

(abc)
( abc)
(abc )
(abc)

$str1は、trim()関数を使用して先頭・末尾の空白を、$str2は、rtrim()関数を使用して末尾の空白を、$str3は、ltrim()関数を使用して先頭の空白をそれぞれ取り除いています。また、$str4はtrim()関数の第二引数を指定して、文字列から「-」を取り除いています。

文字列を置換する

str_replace()関数は、指定した文字列に含まれる文字列を置換します。

str_replace(pattern,replacement,string)
str_replace (検索文字, 置換後の文字列, 元の文字列)

置換処理を実行

    <?php
        echo str_replace( "山田", "佐藤", "私は山田一郎です。" );
    ?>
    

実行結果

私は佐藤一郎です。

上記のスクリプトstr_replace("山田","佐藤","私は山田一郎です。");は「山田」を「佐藤」に置換します。すなわち「私は山田一郎です。」が「私は佐藤一郎です。」と置換されます。

日本語文字列の操作

日本語文字列の長さを調べる

マルチバイト関数であるmb_strlen()関数を使用することにより、日本語の文字列でも長さを取得することが可能になります。

mb_strlen(string)

日本語文字列の長さを取得

    <?php
        $str1 = strlen( "日本語文字123" );
        echo "strlen = " . "$str1<br />¥n";

        $str2 = mb_strlen( "日本語文字123", 'SJIS' );
        echo "mb_strlen = " . "$str2¥n";
    ?>
    

実行結果

strlen = 13
mb_strlen = 8

上記スクリプトの、mb_strlen()関数を使用した場合の文字列の取得結果は8となっています。これはmb_strlen()関数により、マルチバイト文字である「日本語文字」が 一つの文字として認識されています。このとき、第二引数でSJISとしていますが、これは正確にエンコーディングを指定するために記述しています。これを省略した場合、内部エンコーディングが優先され、実行結果が変わってくる場合があります。

かなを変換する

mb_convert_kana(string_str,string_option[mixd_encoding])

mb_convert_kana()関数は、「かな」の文字列を指定した文字列に変換することができます。

全角かなを全角カナに変換

    <?php
        $str = mb_convert_kana( "あいうえお", "C", 'SJIS' );
        echo "$str";
    ?>
    

実行結果

アイウエオ

「mb_convert_kana("あいうえお","C",'SJIS');」の「C」は「全角かな」を「全角カナ」に変換する意味があります。「'SJIS'」はmb_strlenの時と同様に指定しておきます。以上から出力結果は「アイウエオ」となります。

オプション

オプション 機能
r 「全角」英字を「半角」に変換
R 「半角」英字を「全角」に変換
n 「全角」数字を「半角」に変換
N 「半角」数字を「全角」に変換
a 「全角」英数字を「半角」に変換
A 「半角」英数字を「全角」に変換
s 「全角」スペースを「半角」に変換
S 「半角」スペースを「全角」に変換
k 「全角かたかな」を「半角かたかな」に変換
K 「半角かたかな」を「全角かたかな」に変換
h 「全角ひらかな」を「半角かたかな」に変換
H 「半角かたかな」を「全角ひらかな」に変換
c 「全角かたかな」を「全角ひらかな」に変換
C 「全角ひらかな」を「全角かたかな」に変換
V 濁点が付いている文字を一文字に変換、"K","H"と同時に使用。

使用する場合は、小文字と大文字の違いに注意しましょう。

マルチバイト文字列関数

関数 機能
mb_convert_kana カナを変換する。
mb_ereg_replace マルチバイト文字列に正規表現による置換処理を行う。
mb_ereg マルチバイト文字列に正規表現マッチを行う。
mb_eregi_replace マルチバイト文字列に大文字、小文字の区別をせず、正規表現による置換処理を行う。
mb_eregi マルチバイト文字列に大文字、小文字の区別をしない、正規表現マッチを行う。
mb_split マルチバイト文字列を正規表現により分割する。
mb_strcut 文字列の一部を取得する。
mb_strlen 文字列の長さを取得する。
mb_strpos 文字列の中に指定した文字列が最初に出現する場所を探す。
mb_strrpos 文字列の中に指定した文字列が最後に出現する場所を見つける。
mb_strtolower 文字列を小文字に変換する。
mb_strtoupper 文字列を大文字にする。
mb_substr 文字列の一部を取得する。