文字列関数

関数一覧
echo() /  explode() /  implode() /  print() /  str_pad() /  str_repeat() /  str_replace() /  stristr() /  strlen() /  strpos() /  strrpos() /  strstr() /  strtr() /  substr() /  substr_count()
機能一覧
文字列を出力する /  文字列を分割・連結する /  文字列の長さを得る /  文字列A内の文字列Bの有無と位置を調べる /  文字列の一部を得る /  文字列内の特定の文字列を変換する /  文字列を他の文字列で埋めて固定長にする /  文字列の反復/文字列の出現回数

文字列を出力する

echo」と「print

文字列を出力するには、「echo」もしくは「print」を使います。いずれも関数ではなく、PHPの言語構造であるため、パラメータ(引数)は「( )(丸括弧)」で括る必要がありません。

似たような2つの関数(のようなもの)ですが、性質が若干異なっています。

echo()
void echo(string 文字列[, string 文字列...])
指定された(1つ以上の)「文字列」を順番に出力します(連結して出力するのではありません)。
関数ではないので、引数を「( )(丸括弧)」で括る必要がありません。
注:関数の様に引数を「( )(丸括弧)」で括って使用した場合、「文字列」は1つしか指定できなくなります。

以下にサンプル。

<?php
    $hode = "hodenasu";
    
    echo "*** ", $hode, " ***", "<hr />";
    
    function test(){
        echo "エコー";
        return "リターン";
    }
    
    #連結して出力
    echo "[".test()."]<br />";
    
    #順番に出力
    echo "[", test(), "]<br />";
    
    #別々に出力
    echo "[";
    echo test(); //「エコー」出力後に戻り値の「リターン」を出力
    echo "]";
    
    #これは無効(シンタックスエラーになります)
    //echo("hode", "nasu");
    
    /*出力結果
    *** hodenasu ***
    --------------------------------
    エコー[リターン]
    [エコーリターン]
    [エコーリターン]
    */
?>
echo」の省略形

echo」は、以下のように省略して書くことが出来ます。

<?php
    $hode = "hodenasu";
    
    echo "*** ", $hode, " ***";
?>

<?php
    $hode = "hodenasu";
?>
<?="*** ", $hode, " ***"?>
    
<!-- 出力結果
*** hodenasu ***
 -->

省略形の時の開始タグは「<?php」ではなく「<?」である事に注意。

PageTop


print()
bool print(string 文字列)
指定された「文字列」を出力します。
出力成功時に「TRUE」を、失敗時に「FALSE」を返します。
関数ではないので、引数を「( )(丸括弧)」で括る必要がありません。

以下にサンプル。

<?php
    $hode = "hodenasu";
    
    print "*** ".$hode." ***";
    
    /*出力結果
    *** hodenasu ***
    */
?>

print」が値(真偽値)を返すのに対して「echo」は何も返しません。よって、「echo」は値を必要とする所、制御文の条件式に使用したり、演算子による処理を行う事は出来ません。

PageTop


文字列を分割・連結する

explode()関数
array explode(string 区切り文字列, string 文字列[, int 制限値])
「文字列」を「区切り文字列」で分割し、分割されたそれぞれの文字列を要素に持つ配列を返す関数です。
「制限値」が指定されると、その値が返される配列の要素数になり、最後の要素には分割されない残りの文字列が格納されます。
「文字列」に空文字列が指定されると、「FALSE」を返します。また、「文字列」内に「区切り文字列」が無い場合は、「文字列」を返します。

以下にサンプル。

<?php
    $str = "dog|cat|cow";
    
    $animals1 = explode("|", $str);
    list($animals2[0], $animals2[1], $animals2[2]) = explode("|", $str);
    list($animals3[], $animals3[], $animals3[]) = explode("|", $str);
?>
<pre>
<?php
    print_r($animals1);
    print_r($animals2);
    print_r($animals3);
    
    /*出力結果
    Array
    (
        [0] => dog
        [1] => cat
        [2] => cow
    )
    Array
    (
        [2] => cow
        [1] => cat
        [0] => dog
    )
    Array
    (
        [0] => cow
        [1] => cat
        [2] => dog
    )
    */
?>
</pre>

PageTop


implode()関数
string implode(string 連結文字列, array 配列)
「配列」の要素を「連結文字列」で連結した文字列を返す関数です。

以下にサンプル。

<?php
    $str = "dog|cat|cow";
    
    $animals = explode("|", $str);
    
    echo implode(" ", $animals);
    
    /*出力結果
    dog cat cow
    */
?>

PageTop


文字列の長さを得る

strlen()関数
int strlen(string 文字列)
「文字列」の長さを返します。
「マルチバイト文字」を扱う場合は「mb_strlen()」関数を使用します。

以下にサンプル。

<?php
    $str1 = "I am penniless!!";
    $str2 = "大変です。";
    
    echo strlen($str1), "<br />";
    echo strlen($str2), "<br />";
    echo mb_strlen($str1), "<br />";
    echo mb_strlen($str2), "<br />";
    
    /*出力結果
    16
    10
    16
    5
    */
?>

PageTop


文字列A内の文字列Bの有無と位置を調べる

strpos()関数
int strpos(string 文字列, string 部分文字列[, int 開始位置])
「文字列」内で、「部分文字列」が最初に現れる位置を返す(大文字と小文字を区別します)関数です。
「部分文字列」が存在しない場合は「FALSE」を返します。
「開始位置」を指定すると、それ以降に存在するかを調べます。その場合でも、返される値は「文字列」の先頭からの絶対位置になります。
「開始位置」に、指定した「文字列」の字数を超える値を指定するとエラー(「E_WARNING」)を発します。
「部分文字列」が存在するか否かを調べたい場合、この関数が返す値が「0」の場合もあるため、「===演算子」を使って「if(strpos($str, $part) === FALSE){処理}」のように書くか、「is_numeric()」関数を使用して「if(is_numeric(strpos($str, $part))){処理}」と書く必要があります。
「マルチバイト文字」を扱う場合は「mb_strpos()」関数を使用します。

以下にサンプル。

<?php
    $str = "abcABCabcABC";
    $part = "B";
    
    echo strpos($str, $part), "<br />";
    echo strpos($str, $part, 5), "<br />";
    if( strpos($str, "D") === false ){
        echo "not exists<br />";
    }
    if( is_numeric( strpos($str, "a") ) ){
        echo "exists";
    }
    
    /*出力結果
    4
    10
    not exists
    exists
    */
?>

PageTop


strrpos()関数
int strrpos(string 文字列, char 部分文字) [PHP4]
int strrpos(string 文字列, string 部分文字列[, int 開始位置]) [PHP5]
「文字列」内で、「部分文字(単一文字でなければならない)」(PHP5では「部分文字列」)が最後に現れる位置を返す(大文字と小文字を区別します)関数です。
「部分文字/部分文字列」が存在しない場合は「FALSE」を返します。
「開始位置」を指定する(PHP5)と、それ以降に存在するかを調べます。その場合でも、返される値は「文字列」の先頭からの絶対位置になります。
「部分文字/部分文字列」が存在するか否かを調べたい場合、この関数が返す値が「0」の場合もあるため、「===演算子」を使って「if(strrpos($str, $part) === FALSE){処理}」のように書くか、「is_numeric()」関数を使用して「if(is_numeric(strrpos($str, $part))){処理}」と書く必要があります。
「マルチバイト文字」を扱う場合は「mb_strrpos()」関数を使用します。

以下にサンプル。

<?php
    $str = "abcABCabcABC";
    $part = "b";
    
    echo strrpos($str, $part), "<br />";
    if( strrpos($str, "D") === false ){
        echo "not exists<br />";
    }
    if( is_numeric( strpos($str, "a") ) ){
        echo "exists<br />";
    }
    
    #PHP5で有効
    if(substr(PHP_VERSION, 0, 1) >= 5){
        $str = "abcPHP5abcPHP4abcPHP5abc";
        echo strrpos($str, "PHP5"), "<br />";
        $str = "abcPHP5";
        if(strrpos($str, "PHP5", 4) === false)
            echo "not exists";
    }else
        echo "PHP", PHP_VERSION, " is not PHP5.";

    /*出力結果
    7
    not exists
    exists
    17
    not exists
    */
?>

PageTop


文字列の一部を得る

strstr()関数
string strstr(string 文字列, string 部分文字列)
「文字列」内で、「部分文字列」が最初に現れる位置を見付け、「部分文字列」を含むそれ以降の文字列を返す関数です。
「部分文字列」が存在しない場合は「FALSE」を返します。

以下にサンプル。

<?php
    $str = "abcABCabcABC";
    $part = "A";
    
    echo strstr($str, $part), "<br />";
    
    /*出力結果
    ABCabcABC
    */
?>

PageTop


stristr()関数
string stristr(string 文字列, string 部分文字列)
この関数は、「strstr()」関数の「大文字と小文字を区別しない」バージョンです。

以下にサンプル。

<?php
    $str = "abcABCabcABC";
    $part = "A";
    
    echo stristr($str, $part), "<br />";
    
    /*出力結果
    abcABCabcABC
    */
?>

PageTop


substr()関数
string substr(string 文字列, int 開始位置[, int 長さ])
「文字列」内の、「開始位置」からの部分文字列を返す関数です。
「長さ」が指定されると、指定した長さだけの部分文字列を返します。
「開始位置」が負の値の場合は、「文字列」の最後の文字から数えた位置からになります(正確には「文字列」の長さ-「開始位置」からです)。
「長さ」が負の値の場合は、長さではなく「文字列」の後尾「長さ」分をカットしたその手前までの部分文字列を返します(正確には「文字列」の長さ-「長さ」の手前までです)。
返す文字列が無い場合は「空文字列」を返します。
「マルチバイト文字」を扱う場合は「mb_substr()」関数を使用します。

以下にサンプル。

<?php
    $str = "HODENASU";
    
    echo substr($str, 0), "<br />";
    echo substr($str, 8), "<br />";
    echo substr($str, 3, 2), "<br />";
    echo substr($str, -3), "<br />";
    echo substr($str, -3, 2), "<br />";
    echo substr($str, 3, -2), "<br />";
    echo substr($str, -3, -2), "<br />";
    
    /*出力結果
    HODENASU
    (「""」が返された)
    EN
    ASU
    AS
    ENA
    A
    */
?>

PageTop


文字列内の特定の文字列を変換する

strtr()関数
string strtr(string 文字列, string 変換前, string 変換後)
string strtr(string 文字列, array (変換前 => 変換後[, key2 => val2...]))
「文字列」内の「変換前」を全て「変換後」に置き換えて、その結果を返す関数です。
「変換前」と「変換後」の長さが異なると、長い方の余分な部分は無視されます。
引数が2つの場合は、第2引数には添え字が「変換前」で要素が「変換後」という連想配列を指定します。
配列の要素が複数ある場合は、それぞれの添え字に対応した要素に変換されます。この時、まず長い方の文字列から変換していき、変換済みのものは変換対象から外されます。また、「変換前」と「変換後」の長さが異なっていても意図した通りに変換されます。

以下にサンプル。

<?php
    $str = "aiueo";
    $arr1 = array("ai" => "***");
    $arr2 = array("aiu" => "**");
    $arr3 = array("a" => "*", "iueo" => "aaaa");
    
    echo strtr($str, "aiu", "***"), "<br />";
    echo strtr($str, "ai", "***"), "<br />";
    echo strtr($str, "aiu", "**"), "<br />";
    echo strtr($str, $arr1), "<br />";
    echo strtr($str, $arr2), "<br />";
    echo strtr($str, $arr3), "<br />";
    
    /*出力結果
    ***eo
    **ueo
    **ueo
    ***ueo
    **eo
    *aaaa
    */
?>

PageTop


str_replace()関数
mixed str_replace(mixed 置換前, mixed 置換後, mixed 処理対象)
「処理対象」内の「変換前」を全て「変換後」に置き換えて、その結果を返す関数です。
引数には文字列もしくは配列が指定出来ます。
「置換前」と「置換後」が配列の場合、同じインデックス同士で置換を行い、「置換前」の方の要素数が多い場合は、残りの部分は空文字列に置換されます。
「置換前」のみが配列の場合は、全ての要素が「置換後」に置換されます。
「処理対象」が配列の場合は、それぞれの要素において置換処理を行い、その結果を配列で返します。

以下にサンプル。

<?php
    $str_arr[] = "<p>HODENASU</p>";
    $str_arr[] = "<p>NDA</p>";
    $str_arr[] = "<p>NAGERU</p>";
    
    $from = array("<", ">");
    $to = array("&lt;", "&gt;");
    
    $str_arr = str_replace($from, $to, $str_arr);
    
    foreach($str_arr as $val){
        echo $val, "\n";
    }
    
    /*出力結果(HTMLソース)
    &lt;p&gt;HODENASU&lt;/p&gt;
    &lt;p&gt;NDA&lt;/p&gt;
    &lt;p&gt;NAGERU&lt;/p&gt;
    */
?>

PageTop


文字列を他の文字列で埋めて固定長にする

str_pad()関数
string str_pad(string 文字列, int 固定長[, string 埋め込み文字列[, int 埋め方]])
「文字列」の長さが「固定長」に満たない時、(指定されたら)「埋め込み文字列」で(指定されない場合は「 (空白)」で埋められる)「固定長」になるまで埋めてその結果を返す関数です。
「埋め方」には、「STR_PAD_RIGHT」(右側に埋める)、「STR_PAD_LEFT」(左側に埋める)、「STR_PAD_BOTH」(両側に埋める)のいずれかの定数を指定出来ます。省略した場合のデフォルト値は「STR_PAD_RIGHT」です。

以下にサンプル。

<?php
    $str1 = "HODENASU";
    $str2 = "NDA";
    $str3 = "NAGERU";
    
    echo str_pad($str1, 15), "<br />";
    echo str_pad($str1, 15, "*+"), "<br />";
    echo str_pad($str2, 15, "*+", STR_PAD_LEFT), "<br />";
    echo str_pad($str3, 15, "*+", STR_PAD_BOTH), "<br />";
    
    /*出力結果
    HODENASU       
    HODENASU*+*+*+*
    *+*+*+*+*+*+NDA
    *+*+NAGERU*+*+*
    */
?>

PageTop


文字列の反復/文字列の出現回数

str_repeat()関数
string str_repeat(string 文字列, int 回数)
「文字列」を「回数」回繰り返した文字列を返す関数です。

以下にサンプル。

<?php
    echo str_repeat("Pa ", 10), "Paris.";
    
    /*出力結果
    Pa Pa Pa Pa Pa Pa Pa Pa Pa Pa Paris.
    */
?>

PageTop


substr_count()関数
int substr_count(string 文字列, string 部分文字列)
「文字列」中の「部分文字列」の出現回数を返す関数です。
「マルチバイト文字」を扱う場合は「mb_substr_count()」関数を使用します。

以下にサンプル。

<?php
    echo $str = str_repeat("Pa ", 10)."Paris.", "<br />";
    echo substr_count($str, "Pa");
    
    /*出力結果
    Pa Pa Pa Pa Pa Pa Pa Pa Pa Pa Paris.
    11
    */
?>

PageTop


作成日:2004年06月09日 最終更新日:2004年12月17日
【通常モード で表示】