テキスト処理文字列関数
- addslashes〔文字列をスラッシュでクォートする〕
- chunk_split〔文字列を指定文字ずつ分割する〕
- count_chars〔文字列で使用されている文字に関数する情報を返す〕
- echo〔文字列を出力する〕
- explode〔文字列分割〕
- fprintf〔フォーマットされた文字列をストリームに書き込む〕
- html_entity_decode〔HTMLエンティティを適切な文字に変換〕
- htmlspecialchars_decode
〔特殊なHTMLエンティティを文字に戻す〕
- htmlspecialchars, htmlentities〔HTMLエンティティに変換〕
- implode〔配列を文字列に連結〕
- lcfirst
〔最初の文字を小文字にする〕
- ltrim〔左側空白除去(\n,\r,\tも削除,全角の空白は削除不可)〕
- md5〔文字の八ッシュ値を計算する〕
- md5_file〔ファイルのMD5ハッシュ値を計算する〕
- nl2br〔改行文字の前にHTMLの改行文字(<br>)を挿入〕
- number_format〔数値を千の位ごとにグループ化してフォーマット〕
- parse_str〔文字列を処理し、変数に代入する〕
- print〔文字列を出力〕
- printf〔フォーマット済みの文字列を出力〕
- rtrim, chop〔右側空白除去(\n,\r,\tも削除, 全角空白は削除不可)〕
- split〔正規表現による文字列分割〕
- sprintf〔フォーマットされた文字列を返す〕
- sscanf〔フォーマットに基づいて入力文字列を処理〕
- str_getcsv
〔CSV文字列をパースして配列に格納〕
- str_ireplace
〔文字列置換(大文字小文字の区別なし)〕
- str_pad〔文字列を固定長の他の文字列で埋める〕
- str_repeat〔文字を反復する〕
- str_replace〔文字列置換(全て)〕
- str_shuffle〔文字列をシャッフルする〕
- str_split
〔文字列を配列に分解する〕
- str_word_count〔文字列に使用されている単語についての情報を返す〕
- strcasecmp〔大文字小文字を区別しないバイナリセーフな文字列比較〕
- strcmp〔バイナリセーフな文字列比較〕
- strip_tags〔文字列からHTMLおよびPHPタグを除去〕
- stripos
〔特定の文字列が最初に現れる位置を返す(大文字小文字の区別なし)〕
- stripslashes〔「\」除去〕
- stristr〔文字列検索(大文字小文字の区別なし)〕
- strlen〔文字列の長さを取得〕
- strnatcmp〔自然順アルゴリズムで文字列比較〕
- strpbrk
〔文字列中にある任意の文字を探す〕
- strpos〔特定の文字列が最初に現れる位置を返す〕
- strrchr〔文字列が最後に現れる位置を返す〕
- strrev〔文字列を逆順にする〕
- strripos〔特定の文字列が最後に現れる位置を返す(大文字小文字の区別なし)〕
- strrpos〔特定の文字列が最後に現れる位置を返す(大文字小文字の区別なし)〕
- strstr〔特定の文字列が最初に現われる位置を返す〕
- strtolower〔大文字→小文字〕
- strtoupper〔小文字→大文字〕
- strtr〔特定の文字を変換〕
- substr〔文字列の一部分を返す〕
- substr_compare〔指定位置から指定長の2つの文字列ヲバイナリ対応で比較〕
- substr_count〔副文字数の出現回数を数える〕
- substr_replace〔文字列の一部を置換〕
- trim〔左右空白除去(\n,\r,\tも削除, 全角の空白は削除不可)〕
- ucfirst〔最初の文字を大文字にする〕
- ucwords〔文字列の各単語の最初の文字を大文字にする〕
- vfprintf
〔フォーマット文字列をファイルに書き込む〕
- vprintf〔フォーマット文字列を出力〕
- vsprintf〔フォーマット文字列を返す〕
- wordwrap〔文字列を指定した文字数に、指定した分割文字で分割〕
addslashes
文字列をスラッシュでクォートする
unknown
文字列中にあるクウォートされるべき文字列(シングルクウォート、ダブルクウォート、バックスラッシュ、NULL)の前にバックスラッシュを挿入した文字列を返します。
この関数は、データベースにデータを登録する時に使用します。 例えば、「O'reilly 」という名前をデータベースに登録するには、エスケープしてから登録する必要があります。
この関数でクオートされた文字列のクオート部分を取り除く場合は、stripslashes()関数を使用してください。
-
php.ini の設定で
magic_gpc = On
にしている場合、この関数を実行すると重複してエスケープされてしまうので注意して下さい。 magic_quotes_gpcが有効かどうか確認するには、以下のようにget_magic_quotes_gpc()関数を使用します。 -
「magic_quotes_gpc = Off(無効)」の場合に、addslashes()関数を実行するには、
if ( !get_magic_quotes_gpc() ) { addslashes( \str) };
とします。
<?
#magic_quotes_gpc が無効(Off)なら実行
if(!get_magic_quotes_gpc()){
$str = "Is your name O'reilly?";
#シングルクウォートをエスケープ
echo addslashes($str); //Is your name O\'reilly?
}
?>
chunk_split
文字列を指定文字ずつ分割する
unknown
chunklen文字ごと(デフォルトは76)に、end(デフォルトは\r\n
)を挿入した文字列を返します。
<?
#10文字ごとに改行コード(<br>)を挿入
$data = "123456789012345678901234567890";
$new_string = chunk_split($data,10,"<br>");
echo $new_string;
/*
1234567890
1234567890
1234567890
*/
?>
count_chars
文字列で使用されている文字に関数する情報を返す
unknown
文字列において、各バイト値(0..255)が存在する数をカウントし、modeで指定した手法で値を返します。 modeに指定可能な値は、下記になります。
- 0 - 各バイトの値をキー、各バイトの出現回数を値とする配列。
- 1 - 0と同じですが、各バイト値の出現回数がゼロより大きいものの一覧となります。
- 2 - 0と同じですが、各バイト値の出現回数がゼロであるものの一覧となります。
- 3 - すべての一意な文字を含む文字列を返します。
- 4 - 使用されていないすべての文字を含む文字列を返します。
<?
$data = "Two Ts and one F.";
foreach (count_chars($data, 1) as $i => $val) {
echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.<br>";
}
/*
There were 4 instance(s) of " " in the string.
There were 1 instance(s) of "." in the string.
There were 1 instance(s) of "F" in the string.
There were 2 instance(s) of "T" in the string.
There were 1 instance(s) of "a" in the string.
There were 1 instance(s) of "d" in the string.
There were 1 instance(s) of "e" in the string.
There were 2 instance(s) of "n" in the string.
There were 2 instance(s) of "o" in the string.
There were 1 instance(s) of "s" in the string.
There were 1 instance(s) of "w" in the string.
*/
?>
echo
文字列を出力する
unknown
引数に指定した文字列をすべて出力します。 echo()は関数ではなく言語構造のため、引数を括弧でくくる必要はありません。 戻り値はありません。
<?=$foo;?>
のように短短縮構文で記述することもできます。
この短縮構文は、設定オプションのshort_open_tagが有効な場合のみ利用可能です。
<?
echo "Hello World";
// Hello World
echo "This spans
multiple lines. The newlines will be
output as well";
/*
This spans
multiple lines. The newlines will be
output as well
*/
echo "This spans\nmultiple lines. The newlines will be\noutput as well.";
/*
This spans
multiple lines. The newlines will be
output as well.
*/
echo "Escaping characters is done \"Like this\".";
// Escaping characters is done "Like this".
# echo()内で変数は使用可能です
$foo = "foobar";
$bar = "barbaz";
echo "foo is $foo";
// foo is foobar
// 配列を使用することもできます
$baz = array("value" => "foo");
echo "this is {$baz['value']} !";
// this is foo !
# 値ではなく変数名を出力するシングルクオートを使用します
echo 'foo is $foo';
// foo is $foo
# 他の文字を全く使用しない場合、echo変数を使用可能です
echo $foo; // foobar
echo $foo,$bar; // foobarbarbaz
# 複数のパラメータを結合してechoに渡すことも可能です
echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10);
echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n";
/*
This string was made with multiple parameters.
This string was made with concatenation.
*/
echo <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!
END;
/*
This uses the "here document" syntax to output
multiple lines with interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!
*/
# echo は関数のように動作しないので、以下のコードは正しくありません
($some_var) ? echo 'true' : echo 'false';
# しかし、次の例は動作します
# print も言語構造ですが、関数のように動作するためコンテキスト中で使用可能です
($some_var) ? print 'true' : print 'false'; // false
echo $some_var ? 'true': 'false'; // false
?>
explode
文字列分割
unknown
文字列を区切り文字で分割した配列を返します。
オプションの第3引数limit(分割する数)を指定した場合、返される配列の要素数は最大limit数となります。 limit数よりも分割した数が多い場合は、配列の最終要素に文字列の残り全てが入ります。
区切り文字に空文字列は指定できません。 空文字列を指定するとFALSEが返ります。 区切り文字が文字列に含まれていない場合は、分割されずにそのまま文字列が返ります。 区切り文字が負の場合、最後のlimitを除く全ての構成要素が返されます(※PHP 5.1.0~)。
配列を指定した区切り文字で連結して文字列にする場合は、implode()関数を使用してください。
<?
#文字列を"/"で分割して配列にする
$fruit = "apple/banana/grape";
$fruit_ary = explode("/", $fruit);
echo $fruit_ary[0]; //apple
print_r($fruit_ary); //Array ( [0] => apple [1] => banana [2] => grape )
#limitを指定
$fruit = explode(",", "apple,banana,grape,orange,remon", 3);
print_r($fruit); //Array ( [0] => apple [1] => banana [2] => grape,orange,remon )
#日付を分解
$sdate = explode("/", "2005/01/20");
echo $sdate[0]."<br>"; //2005
echo $sdate[1]."<br>"; //01
echo $sdate[2]."<br>"; //20
list($year, $month, $day) = explode("-", "2005-01-20");
echo $year."<br>"; //2005
echo $month."<br>"; //01
echo $day."<br>"; //20
?>
fprintf
フォーマットされた文字列をストリームに書き込む
unknown
フォーマットした文字列を指定したファイルポインタに書き込みます。 戻り値として、書き込まれた文字列の長さを返します。
第1引数ファイルポインタには、書き込むファイルポインタを指定します。 fopen()を使用して作成したファイルポインタである必要があります。
第2引数フォーマットには、文字列のフォーマット方法を指定します。 フォーマット方法はsprintf()を参照してください。
<?
if(!($fp=fopen('currency.txt', 'w'))){
return;
}
$tday=getdate();
$length=fprintf($fp, "%04d-%02d-%02d", $tday[year], $tday[mon], $tday[mday]);
echo $length; // 書き込まれた文字列の長さ:10
// ISO形式にフォーマットした日付を currency.txt に書き込みます
?>
html_entity_decode
HTMLエンティティを適切な文字に変換
unknown
この関数は、htmlentities()と逆の動作をします。
文字列内のすべてのHTMLエンティティを適切な文字に変換し、返り値としてデコードされた文字列を返します。
変換されるHTMLエンティティは、&
、"e;
(ENT_NOQUOTESが設定されていない場合のみ)、&039;
(ENT_QUOTESが設定されている場合のみ)、<
、>
です。
オプションの第2引数クウォート形式には、シングルクオートまたはダブルクオートに関する動作を下記3つの定数のいずれかで指定します。 省略した場合は、「ENT_COMPAT」が適用されます。
定数名 | 説明 |
---|---|
ENT_COMPAT | ダブルクォートのみ変換。シングルクォートはそのまま。(デフォルト) |
ENT_QUOTES | ダブルクォート、シングルクォートを共に変換。 |
ENT_NOQUOTES | ダブルクォート、シングルクォートを共に変換しない。 |
オプションの第3引数文字セットには、変換に使用する文字セットを指定します。 デフォルトは「ISO-8859-1」です。 PHP v4.3.0~は、下記の文字セットがサポートされています。
文字セット | エイリエアス | 説明 |
---|---|---|
ISO-8859-1 | ISO-8859-1 | 西欧、Latin-1 ※デフォルト |
UTF-8 | ASCII 互換のマルチバイト 8 ビット Unicode | |
BIG5 | 950 | 繁体字中国語。主に台湾で使用される。 |
GB2312 | 936 | 簡体字中国語。中国の標準文字セット。 |
Shift_JIS | SJIS, 932 | 日本語。 |
EUC-JP | EUCJP | 日本語 |
<?
$str = "<p>I'll \"walk\" dog & cat now</p>";
$a=htmlentities($str);
$b=html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
?>
htmlspecialchars_decode 
特殊なHTMLエンティティを文字に戻す
unknown
この関数は、htmlspecialchars()と逆の動作をします。
特殊なHTMLエンティティを文字に戻し、返り値としてデコードされた文字列を返します。
変換されるHTMLエンティティは、&
、"e;
(ENT_NOQUOTESが設定されていない場合のみ)、&039;
(ENT_QUOTESが設定されている場合のみ)、<
、>
です。
第1引数stringには、デコードする文字列を指定します。
オプションの第2引数クウォート形式には、シングルクオートまたはダブルクオートに関する動作を下記3つの定数のいずれかで指定します。 省略した場合は、「ENT_COMPAT」が適用されます。
定数名 | 説明 |
---|---|
ENT_COMPAT | ダブルクォートのみ変換。シングルクォートはそのまま。(デフォルト) |
ENT_QUOTES | ダブルクォート、シングルクォートを共に変換。 |
ENT_NOQUOTES | ダブルクォート、シングルクォートを共に変換しない。 |
<?
$str = '<p>this -> "'</p>';
echo htmlspecialchars_decode($str); //this -> "'
# ダブルクォート、シングルクォート両方を変換
echo htmlspecialchars_decode($str, ENT_QUOTES); //this -> "'
# ダブルクォート、シングルクォート両方ともそのまま。
echo htmlspecialchars_decode($str, ENT_NOQUOTES); //this -> "'
?>
htmlspecialchars, htmlentities
HTMLエンティティに変換
unknown
string htmlentities ( string $文字列[, int $クウォート形式=ENT_COMPAT[, string $文字セット[, bool $double_encode=true]]] )
文字の中には HTML において特殊な意味を持つものがあり、本来の値を表示したければ HTML の表現形式に変換する必要があります。 この関数は、これらの変換を行った結果の文字列を返します。
&
→ &
、<
→ <
、>
→ &>
に変換されます。
htmlentities()関数は、htmlspecialchars()関数と同じですが、HTMLエンティティと等価な意味を有する文字をHTMLエンティティに変換する点が異なります。
デコード(逆の処理)をしたい場合は、html_entity_decode()を使用します。
オプションの第2引数クウォート形式には、シングルクオートまたはダブルクオートに関する動作を下記3つの定数のいずれかで指定します。 省略した場合は、「ENT_COMPAT」が適用されます。
定数名 | 説明 |
---|---|
ENT_COMPAT | ダブルクォートのみ変換。シングルクォートはそのまま。(デフォルト) |
ENT_QUOTES | ダブルクォート、シングルクォートを共に変換。 |
ENT_NOQUOTES | ダブルクォート、シングルクォートを共に変換しない。 |
オプションの第3引数文字セットには、変換に使用する文字セットを指定します。 デフォルトは「ISO-8859-1」です。 PHP v4.3.0~は、下記の文字セットがサポートされています。
文字セット | エイリエアス | 説明 |
---|---|---|
ISO-8859-1 | ISO-8859-1 | 西欧、Latin-1 ※デフォルト |
UTF-8 | ASCII 互換のマルチバイト 8 ビット Unicode | |
BIG5 | 950 | 繁体字中国語。主に台湾で使用される。 |
GB2312 | 936 | 簡体字中国語。中国の標準文字セット。 |
Shift_JIS | SJIS, 932 | 日本語。 |
EUC-JP | EUCJP | 日本語 |
オプションの第4引数double_encode(PHP v5.2.3~)にFALSEを指定すると、PHPは既存のHTMLエンティティをエンコードしないようにできます。 省略またはTRUEを指定すると、既存のエンティティも含めすべてが変換されます。
<?
#ダブルクオートのみ変換
$str = htmlspecialchars('<a href="O\'reilly">O\'reilly</a>');
echo $str."\n"; //<a href="O'reilly">O'reilly</a>
#ダブルクオートおよびシングルクオートを共に変換
$str = htmlspecialchars('<a href="O\'reilly">O\'reilly</a>', ENT_QUOTES);
echo $str."\n"; //<a href="O'reilly">O'reilly</a>
#ダブルクオートおよびシングルクオートを共に変換しない
$str = htmlspecialchars('<a href="O\'reilly">O\'reilly</a>', ENT_NOQUOTES);
echo $str."\n"; //<a href="O'reilly">O'reilly</a>
# double_encode = true(デフォルト)
$str = htmlspecialchars('<strong>PHP & JavaScript Room</strong>', ENT_QUOTES);
echo $str."\n"; //&lt;strong&gt;PHP &amp; JavaScript Room&lt;/strong&gt;
# double_encode = false
$str = htmlspecialchars('<strong>PHP & JavaScript Room</strong>', ENT_QUOTES,"UTF-8",false);
echo $str."\n"; //<strong>PHP & JavaScript Room</strong>
?>
implode
配列を文字列に連結
unknown
全ての配列の要素を区切り文字で連結した文字列を返します。 join()関数は、この関数のエイリアスです。
この関数とは逆の動作(文字列を指定した区切り文字で分割して配列にする)をする場合は、explode()関数を使用してください。
<?
#implode
$array = Array("apple", "banana", "grape");
$str = implode(",", $array);
echo $str; //apple,banana,grape
#join
$array = Array("apple", "banana", "grape");
$str = join(",", $array);
echo $str; //apple,banana,grape
?>
lcfirst 
最初の文字を小文字にする
unknown
文字列の先頭の文字がアルファベットであれば、その文字をを小文字に変換し、変換後の文字列を返します。
逆に、先頭の文字を大文字に変換するには、ucfirst()を使用します。
<?
if(false===function_exists('lcfirst')):
// PHP v5.3.0未満
function lcfirst( $str )
{ return (string)(strtolower(substr($str,0,1)).substr($str,1));}
endif;
$foo='HelloWorld';
echo $foo=lcfirst($foo); // helloWorld
$bar='HELLO WORLD!';
echo $bar=lcfirst($bar); // hELLO WORLD!
echo $bar=lcfirst(strtoupper($bar)); // hELLO WORLD!
?>
ltrim
左側空白除去(\n,\r,\tも削除,全角の空白は削除不可)
unknown
文字列の先頭にある空白文字を除去した文字列を返します。 オプションの第2引数charlist(PHP 4.1.0~)を省略した場合は、以下の文字が削除されます。
正規表現 | ASCII文字セット | 説明 |
---|---|---|
"" | (ASCII 32 (0x20)) | 通常の空白 |
"\t" | (ASCII 9 (0x09)) | タブ |
"\n" | (ASCII 13 (0x0D)) | 改行 |
"\r" | (ASCII 10 (0x0A)) | リターン |
"\0" | (ASCII 0 (0x00)) | NULバイト |
"\x0B" | (ASCII 11 (0x0B)) | 垂直タブ |
削除する文字を指定する場合は、charlistに削除したい全ての文字をリストにして指定します。
# \binary の始めにあるASCII制御文字(0~31まで)のみ削除
ltrim(\binary, "\x00..\x1F");
- 文字列の末尾にある空白文字のみ除去する場合は、rtrim()関数/chop()関数を使用してください。
- 文字列の両端にある空白文字を除去する場合は、trim()関数を使用してください
<?
#文字列の左側にある空白文字を除去
$str = ltrim(" \t\t abc");
echo "'".$str."'<br>"; //'abc'
#文字列の右側にある空白は除去されない
$str = ltrim("This is a pen ");
echo "'".$str."'<br>"; //'This is a pen '
?>
md5
文字の八ッシュ値を計算する
unknown
指定した文字列のMD5ハッシュ値をRFC 1321 - The MD5 Message-Digest Algorithmのアルゴリズムに基づいて計算し、戻り値として、そのハッシュ値(32文字の16進数)を返します。
オプションの第2引数raw_output(PHP 5.0.0~)にTRUEを指定すると、長さ16の生のバイナリフォーマットでダイジェストを返します。 デフォルトはFALSEです。
<?
$str="apple";
if(md5($str)==='1f3870be274f6c49b3e31a0c6728957f'){
echo "一致";
exit;
}
?>
md5_file
ファイルのMD5ハッシュ値を計算する
unknown
指定したファイルのMD5ハッシュ値をRFC 1321 - The MD5 Message-Digest Algorithmのアルゴリズムに基づいて計算します。 成功した場合は、そのハッシュ値(32文字の16進数)を返します。失敗した場合は、FALSEを返します。
第1引数ファイル名には、変換するファイルのパスを指定します。
オプションの第2引数raw_output(PHP 5.0.0~)にTRUEを指定すると、長さ16の生のバイナリフォーマットでダイジェストを返します。 デフォルトはFALSEです。
<?
$file='sample.zip';
echo 'MD5 file hash of ' . $file . ': ' . md5_file($file);
// MD5 file hash of sample.zip: 5a9cbbf85b89ece5875f80e57864eff1
?>
nl2br
改行文字の前にHTMLの改行文字(<br>)を挿入
unknown
指定した文字列に含まれるすべての改行文字の前に<br>
または<br />
を挿入し、挿入後の文字列を返します。
PHP 4.0.5 以前のバージョンでは、<br>
が挿入されます。
オプションの第2引数is_xhtml(PHP v5.3.0~)には、XHTML準拠の改行を使うか否かを真偽値で指定します。 デフォルトはTRUE(XHTML準拠の改行を使う)です。
<?
echo nl2br("foo isn't\n bar");
/* 出力されるコード
foo isn't<br>
bar
*/
#print_r()と組み合わせて配列のデバッグ表示
$ary = array('a'=>'apple', 'x'=> array ('x', 'y', 'z'));
$results = print_r($ary, true);
echo nl2br($results);
/* 出力されるコード
Array<br>
(<br>
[a] => apple<br>
[x] => Array<br>
(<br>
[0] => x<br>
[1] => y<br>
[2] => z<br>
)<br>
<br>
)<br>
*/
?>
<?
# XHTML 準拠の改行を使わない($is_xhtml = false)
echo nl2br("Welcome\r\nThis is my HTML document", false);
/* 出力されるコード
Welcome<br>
This is my HTML document
*/
# XHTML 準拠の改行を使用($is_xhtml = true)
echo nl2br("Welcome\r\nThis is my HTML document", true);
/* 出力されるコード
Welcome<br>
This is my HTML document
*/
?>
number_format
数値を千の位ごとにグループ化してフォーマット
unknown
数値をフォーマットして返します。 引数は1つ、2つまたは4つ指定できます(3つはない)。
- 【引数が1つの場合】
数値は3桁区切りにカンマが挿入され、小数なしでフォーマットされます。
- 【引数が2つの場合】
数値は桁数の少数の前にドット、3桁区切りにカンマが挿入されてフォーマットされます。
- 【引数が4つの場合】
数値はドットの代わりにdec_pointが桁数の少数の前に挿入され、3桁区切りにカンマの代わりにthousands_sepが挿入されます。 thousands_sepは最初の文字だけが使用されます(つまり1文字だけ指定する)。
<?
#金額のフォーマット(3桁区切りにカンマを挿入)
$price=1000000;
echo number_format($price); //1,000,000
#3桁区切りにカンマ(.)の代わりに ' '(半角スペース)を挿入
$price=100000000000;
echo number_format($price,3," "," "); //100 000 000 000 000
?>
parse_str
文字列を処理し、変数に代入する
unknown
URL経由で渡されるクエリ文字列のような文字列を処理し、変数($arr)に代入します。 戻り値はありません。
第1引数文字列には、クエリ文字列のような文字列を指定します。
オプションの第2引数arrを指定すると、$arrではなく、指定した変数に保存されます。
<?
$str="first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?>
print
文字列を出力
unknown
第1引数argに指定した文字列を出力します。 print()は関数ではなく言語構造のため、引数を括弧でくくる必要はありません。 戻り値として常に「1」を返します。
<?
print("<p>Hello World</p>\n");
// <p>Hello World</p>
print "<p>print() also works without parentheses.</p>\n";
// <p>print() also works without parentheses.</p>
print "<p>This spans
multiple lines. The newlines will be
output as well</p>\n";
/*
<p>This spans
multiple lines. The newlines will be
output as well</p>
*/
print "<p>This spans\nmultiple lines. The newlines will be\noutput as well.</p>\n";
/*
<p>This spans
multiple lines. The newlines will be
output as well.</p>
*/
print "<p>escaping characters is done \"Like this\".</p>\n";
/*
<p>escaping characters is done "Like this".</p>
*/
# print文の中で変数を使用可能
$foo="foobar";
$bar="barbaz";
print "foo is $foo";
// foo is foobar
# print文の中で配列も使用可能
$bar=array("value"=> "foo");
print "this is {$bar['value']} !";
// this is foo !
# シングルクオートを使用すると値ではなく変数名が出力されます
print 'foo is $foo';
// foo is $foo
# 他の文字を使用しない場合、変数だけを出力可能
print $foo; // foobar
print <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon no extra whitespace!
END;
/*
This uses the "here document" syntax to output
multiple lines with interpolation. Note
that the here document terminator must appear on a
line with just a semicolon no extra whitespace!
*/
?>
printf
フォーマット済みの文字列を出力
unknown
指定したフォーマットにしたがって出力します。 戻り値として、出力した文字列の長さを返します。
<?
$len=printf ('%s、%sさん', 'こんにちは', 'ゲスト');
echo $len; // こんにちは、ゲストさん33
?>
rtrim, chop
右側空白除去(\n,\r,\tも削除, 全角空白は削除不可)
unknown
string chop ( string $文字列[, string charlist] )
文字列の末尾にある空白文字を除去した文字列を返します。 オプションの第2引数charlist(PHP 4.1.0~)を省略した場合、以下の文字が削除されます。
正規表現 | ASCII文字セット | 説明 |
---|---|---|
"" | (ASCII 32 (0x20)) | 通常の空白 |
"\t" | (ASCII 9 (0x09)) | タブ |
"\n" | (ASCII 13 (0x0D)) | 改行 |
"\r" | (ASCII 10 (0x0A)) | リターン |
"\0" | (ASCII 0 (0x00)) | NULバイト |
"\x0B" | (ASCII 11 (0x0B)) | 垂直タブ |
削除する文字を指定する場合はcharlistに削除したい全ての文字をリストにして指定します。
# \binary の始めにあるASCII制御文字(0~31まで)のみ削除
rtrim(\binary, "\x00..\x1F");
<?
#文字列の右側にある空白文字を除去
$str = rtrim("This is a pen ");
echo "'".$str."'<br>"; //'This is a pen'
#文字列の左側にある空白は除去されない
$str = rtrim(" \t\t abc");
echo "'".$str."'<br>"; //' \t\t abc'
?>
split
正規表現による文字列分割
unknown
pattern(大文字小文字を区別する正規表現)区切りで文字列を分割した配列を返します。 エラーが発生した場合は、FALSEを返します。
オプションの第3引数limit(分割する数)を指定すると、返される配列の要素数は最大limitとなります。 limitで指定した数 < 文字列の分割数 の場合、最終の要素に文字列の残りの部分が全て格納されます。
patternがn回現われる場合、返される値には、n+1の要素が含まれます。 patternが現われない場合または文字列が空の場合は、分割されず、要素が1つだけの配列が返されます。
<?
#「,」「」「/」「-」のいずれかで分割
$str = "apple,banana-grape/orange.melon";
$array = split("[,./-]", $str);
echo nl2br(print_r($array,true));
/*
Array
(
[0] => apple
[1] => banana
[2] => grape
[3] => orange
[4] => melon
)
*/
?>
sprintf
フォーマットされた文字列を返す
unknown
指定したフォーマットに基づいて生成された文字列を返します。 フォーマットは0個以上のディレクティブ(指示子)により構成されています。
ディレクティブには、そのまま結果にコピーされる(%を除く)通常の文字列と、変換指定子(conversion specifications)があり、取り出される際にどちらもそれ自身が引数となります。 各変換指示子は、パーセント記号(%)の後に、これらの要素が1つ以上続いたものになります。
番号 | 説明 |
---|---|
1 | 幅の余りを埋める文字を指定 (空白または0を指定可能) |
2 | 幅の中の文字列の配列を指定 (初期値は右寄せで、.が左寄せ) |
3 | 表示幅の桁数を数字で指定 |
4 | ドットに続いて小数点以下の桁数を数字で指定 |
5 | 引数の型を指定 |
型 | 説明 | 型 | 説明 | 型 | 説明 |
---|---|---|---|---|---|
%b | 2進 | %u | 符号なし整数 | %s | 文字列 |
%c | 文字 | %f | 浮動小数点 | %x | 16進小文字 |
%d | 整数 | %o | 8進 | %X | 16進大文字 |
<?
#整数をゼロで埋める
$num = 10;
echo sprintf("%05d", $num)."<br>"; //00010
#現在の日付をフォーマット
$today = getdate();
echo sprintf("%04d-%02d-%02d", date(Y), date(m), date(d))."<br>"; //例 2005-01-10
#引数の変換
$year = date(Y);
echo sprintf("今年は%d年です", $year)."<br>"; //例 今年は2005年です
$a = "today";
echo sprintf("This is %s", $a=="today" ? "today" : "not today"); //This is today
?>
sscanf
フォーマットに基づいて入力文字列を処理
unknown
この関数は、printf()の入力版です。 読み込んだ文字列を指定したフォーマットに基づいて解釈します。 オプションで指定する参照渡しの変数に、 パースされた値が格納されます。
引数が2つの場合、処理された値は配列として返されますが、オプションの参照渡しの変数を指定した場合、この関数は割り当てられた値の数を返します。
フォーマットの中のあらゆる空白文字は、文字列中の空白文字列にマッチします。
例えば、フォーマットにタブ文字¥t
が含まれていた場合、それは文字列中の半角スペースにマッチしてしまいます。
<?
# シリアル番号を得る
list($serial) = sscanf("SN/2350001", "SN/%d");
# 続いて製造日を得る
$mandate = "January 01 2000";
list($month, $day, $year) = sscanf($mandate, "%s %d %d");
echo "Item $serial was manufactured on: $year-" . substr($month, 0, 3) . "-$day\n";
# オプション引数を指定すると、代入された値の数を返す
// author 情報を取得し、DocBook エントリを生成
$auth = "24\tLewis Carroll";
$n = sscanf($auth, "%d\t%s %s", $id, $first, $last);
echo "<author id='$id'>
<firstname>$first</firstname>
<surname>$last</surname>
</author>\n";
/*
<author id='24'>
<firstname>Lewis</firstname>
<surname>Carroll</surname>
</author>
*/
echo $n; // 3
?>
str_getcsv 
CSV文字列をパースして配列に格納
unknown
CSV文字列をパースして配列に格納して返します。 fgetcsv()と似ていますが、fgetcsv()はファイルをパースするのに対し、この関数は文字列をパースする点が異なります。
第1引数inputには、パースする文字列を指定します。
オプションの第2引数delimiterには、フィールドの区切り文字(1文字のみ)を指定します。 デフォルトはカンマ区切りです。
オプションの第3引数enclosureには、フィールドの囲い文字(1文字のみ)を指定します。 デフォルトはダブルクウォートです。
オプションの第4引数escapeには、エスケープ文字(1文字のみ)を指定します。 デフォルトはバックスラッシュです。
<?
if(!function_exists('str_getcsv')){
/* PHP v5.3.0未満 */
function str_getcsv($input, $delimiter = ",", $enclosure = '"', $escape = "\\") {
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, $input);
rewind($fp);
$data = fgetcsv($fp, 1000, $delimiter, $enclosure); // $escape only got added in 5.3.0
fclose($fp);
return $data;
}
}
$result=str_getcsv("1,2,3,4,5,6");
echo nl2br(print_r($result, true));
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
*/
?>
str_ireplace 
文字列置換(大文字小文字の区別なし)
unknown
str_replace()と違い、大文字小文字を区別しないで文字列を置換します。
subject内にあるすべてのsearchを大文字小文字を区別しないでreplaceに置換します。 戻り値として置換した文字列あるいは配列を返します。
第3引数subjectが配列の場合は、配列内の要素すべてに検索と置換が行われ、戻り値も配列になります。
オプションの第4引数count(PHP v5.0.0~)を指定すると、マッチして置換が行われた数を参照渡しで取得することができます。
第1引数seachおよび第2引数replaceが配列の場合、この関数はそれぞれの配列から取り出した値を使用し、第3引数subjectに対して置換を行います。 replaceの要素数が、searchより少ない場合、残りの要素は空要素に置換されます。 例えば、searchが配列でreplaceが文字列の場合は、すべてのsearchが同じ文字列に置換されます。
<?
$bodytag=str_ireplace("%class%", "column_2", "<body class='%CLASS%'>");
echo $bodytag; // <body class='column_2'>
# 第1引数seachおよび第2引数replaceが配列の場合
$search=array("1","2","3");
$replace=array("いち","に","さん");
$subject=array("「1・2・3」でバカになる");
$result=str_ireplace($search,$replace,$subject,$count);
print_r($result); // Array ( [0] => 「いち・に・さん」でバカになる )
echo "置換数 = $count"; // 3
# replaceの要素数が、searchより少ない場合、残りの要素は空要素に置換される
$search2=array("1","2","3");
$replace2=array("いち","に");
$subject2=array("「1・2・3」でバカになる");
$result2=str_ireplace($search2,$replace2,$subject2,$count2);
print_r($result2); // Array ( [0] => 「いち・に・」でバカになる )
echo "置換数 = $count2"; // 3
#earchが配列でreplaceが文字列の場合は、すべてのsearchが同じ文字列に置換
$search3=array("1","2","3");
$replace3="いち";;
$subject3=array("「1・2・3」でバカになる");
$result3=str_ireplace($search3,$replace3,$subject3,$count3);
print_r($result3); // Array ( [0] => 「いち・いち・いち」でバカになる )
echo "置換数 = $count3"; // 3
?>
str_pad
文字列を固定長の他の文字列で埋める
unknown
文字列の左、右、両側を指定した長さで埋めます。
オプションの第3引数pad_stringが省略された場合、文字列は空白で埋められ、それ以外の場合は、pad_string(文字)で指定した数まで埋められます。
オプションの第4引数pad_typeには、STR_PAD_RIGHT、STR_PAD_LEFT、SSTR_PAD_BOTHを指定できます。 pad_typeが省略された場合はSSTR_PAD_RIGHT(右を埋める)が使用されます。
第2引数pad_lengthの値が、負または文字列の長さよりも短い場合は埋める操作は行われません。 また、埋める文字数がpad_stringの長さで均等に分割できない場合、pad_stringは切り捨てられます。
<?
$input = "Alien";
#文字列の長さ > pad_length の場合は、埋める処理は行われない
echo str_pad($input, 2, "*")."<br>"; //Alien
#STR_PAD_RIGHT(左を埋める)
echo str_pad($input, 10, "-=", STR_PAD_RIGHT)."<br>"; //Alien-=-=-
#STR_PAD_LEFT(左を埋める)
echo str_pad($input, 10, "-=", STR_PAD_LEFT)."<br>"; //-=-=-Alien
#STR_PAD_BOTH(両側を埋める)
echo str_pad($input, 10, "_", STR_PAD_BOTH)."<br>"; //__Alien___
?>
str_repeat
文字を反復する
unknown
文字列を反復回数繰り返した文字列を返します。 反復回数には0より大きい数値を指定します(0を指定した場合は、空文字列が返されます)。
<?
echo str_repeat("-=", 10)."<br>"; //-=-=-=-=-=-=-=-=-=-=
echo str_repeat("Ya ", 5)."Yahoo!"; //Ya Ya Ya Ya Ya Yahoo!
?>
str_replace
文字列置換(全て)
unknown
文字列の中の検索文字列を全て置換文字列で置換して返します。 文字列が配列の場合、文字列の各要素ごとに置換が行われ、返り値は配列となります。
検索文字列と置換文字列が配列の場合、この関数は各配列から値を1つ取り出し、文字列上で検索と置換を行うために使用します。 置換文字列の値が検索文字列よりも少ない場合、置換される値の残りの部分には空文字列が使用されます。
検索文字列が配列で置換文字列が文字列の場合、置換文字列が検索文字列の各要素について使用されます(ただし逆は無意味)。
オプションの第4引数count(PHP v5.0.0~)を指定すると、マッチして置換が行われた数を参照渡しで取得することができます。
<?
#文字列中の「<br>」を全て、「,」に置換
$search = "<br>";
$replace = ",";
$subject = "apple<br>banana<br>grape";
$retv = str_replace($search, $replace, $subject);
echo $retv."<br>"; //apple,banana,grape
#配列中の「<」「>」を全て、「<」「>」に置換
$from = array("<", ">");
$to = array("<", ">");
$ary = array("<p>HONDA</p>","<p>TOYOTA</p>","<p>BMW</p>");
$retv_ary = str_replace($from, $to, $ary, $count);
foreach($retv_ary as $value){
echo $value . "<br>\n";
}
echo "置換数 = $count"; // 12
/*
<p>HONDA</p>
<p>TOYOTA</p>
<p>BMW</p>
*/
?>
str_shuffle
文字列をシャッフルする
unknown
文字列を ランダムにシャッフルして返します。日本語には使えません。
<?
$str = "abcdef";
$shuffled = str_shuffle($str);
echo $shuffled; //例 afbdec
?>
str_split 
文字列を配列に分解する
unknown
第1引数strに指定した文字列を配列に変換します。 オプションの第2引数split_lengthが指定されている場合、戻り値の配列の各要素はsplit_lengthに指定した長さとなります。 それ以外の場合は、1文字ずつ分割された配列となります。
split_lengthが1より小さい場合はFALSEが帰ります。 split_lengthがstrの長さより大きい場合は、文字列全体が唯一の要素となる配列を返します。
オプションの第2引数split_lengthには、分割する文字数の最大長を指定します。 デフォルトは「1」(1文字ずつ分割)です。
<?php
$str="Hello Friend";
$arr1=str_split($str);
echo nl2br(print_r($arr1,true));
/*
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] =>
[6] => F
[7] => r
[8] => i
[9] => e
[10] => n
[11] => d
)
*/
$arr2=str_split($str, 3);
echo nl2br(print_r($arr2,true));
/*
Array
(
[0] => Hel
[1] => lo
[2] => Fri
[3] => end
)
*/
?>
str_word_count
文字列に使用されている単語についての情報を返す
unknown
第1引数strに指定した単語数を数えます。 オプションの第2引数formatが指定されていない場合は、見つかった単語数を整数値で返します。 指定されている場合は、formatに指定した内容に応じた配列で返します。
オプションの第2引数formatには、戻り値として取得する値を数値で設定します。 サポートされている値は、下記の通りです。
- 0 - 見つかった単語数を返す。
- 1 - str内に見つかった単語を含む配列を返す。
- 2 - str内での単語の開始位置をキー、単語自体をその値とする連想配列を返す。
オプションの第3引数charlist(PHP v5.1.0~)には、単語とみなされる文字に追加する文字のリストを追加します。
<?
$str = "Hello fri3nd, you're
looking good today!";
# 文字列内に見つかった単語を含む配列を返す
echo nl2br(print_r(str_word_count($str, 1),true));
/*
Array
(
[0] => Hello
[1] => fri
[2] => nd
[3] => you're
[4] => looking
[5] => good
[6] => today
)
*/
# 文字列内での単語の開始位置をキー、単語自体をその値とする連想配列を返す
echo nl2br(print_r(str_word_count($str, 2),true));
/*
Array
(
[0] => Hello
[6] => fri
[10] => nd
[14] => you're
[29] => looking
[46] => good
[51] => today
)
)
*/
# # 文字列内に見つかった単語を含む配列を返す + 文字リスト追加
echo nl2br(print_r(str_word_count($str, 1, 'aaac3'),true));
/*
Array
(
[0] => Hello
[1] => fri3nd
[2] => you're
[3] => looking
[4] => good
[5] => today
*/
# 見つかった単語の数を返す
echo str_word_count($str); // 7
?>
strcasecmp
大文字小文字を区別しないバイナリセーフな文字列比較
unknown
大文字小文字を区別しないバイナリセーフな文字列比較を行います。 第1引数str1が第2引数str2より小さい場合は負、大きい場合は正、等しい場合は0を返します。
大文字小文字を区別してバイナリセーフな文字列比較を行う場合は、strcmp()を使用してください。
<?
# 等しい
$var1="Hello";
$var2="hello";
$var3="Hellooo";
if(strcasecmp($var1, $var2)==0){
echo '大文字と小文字の区別をしない文字列比較において、$var1と$val2は等しい。';
}
// 大文字と小文字の区別をしない文字列比較において、$var1と$val2は等しい。
# val3 > val2
echo strcasecmp($var3, $var2); // 2
# val2 < val3
echo strcasecmp($var2, $var3); // -2
?>
strcmp
バイナリセーフな文字列比較
unknown
バイナリセーフな文字列比較を行います。大文字小文字は区別されます。 第1引数str1が第2引数str2より小さい場合は負、大きい場合は正、等しい場合は0を返します。
大文字小文字を区別しないで、バイナリセーフな文字列比較を行う場合は、strcasecmp()を使用してください。
<?
# 等しい
$var1="Hello";
$var2="hello";
echo strcmp($var1, $var2); // -1
echo strcmp($var1, "Hello"); // 0
echo strcmp($var2, $var1); // 1
?>
stripos 
特定の文字列が最初に現れる位置を返す(大文字小文字の区別なし)
unknown
大文字小文字の区別をしないで、文字列の中で、部分文字列が最初に現れる位置を数字で返します。 部分文字列が見つからない場合に、FALSEを返します。
大文字小文字を区別する場合は、strpos()を使用してください。
strrpos()関数と異なり、この関数は引数部分文字列の文字列全体が検索対象となります。 部分文字列が文字列でない場合は整数に変換され、その結果が検索対象の文字列として適用されます。
オプションの第3引数検索開始位置(先頭は0)で検索を開始する文字列の文字を指定できます。 この場合も返される位置は文字列の先頭からの相対位置となります。
部分文字列の存在有無を調べる場合、この関数が返す値がFALSEでなく、0の場合もあるため、
===演算子を使い、if(stripos( \str, \part)===FALSE) { 処理 }
のように記述する必要があります。
マルチバイト対応版のstrpos()は、mb_strpos()関数を使用してください。
<?
$findme='a';
$str1='xyz';
$str2='ABC';
$pos1=stripos($str1, $findme);
$pos2=stripos($str2, $findme);
# $str1内に$finemeは存在するか?
if ($pos1===false) {
echo "'$str1'内に'$findme'は存在しません";
}
// 'xyz'内に'a'は存在しません
# 単に == としても期待通りに動作しません。なぜなら 'a' は 0 番目(最初) の文字だからです。
if ($pos2 !== false) {
echo "'$findme'は、'$str2'の'$pos2'番目に見つかりました";
}
// 'a'は、'ABC'の'0'番目に見つかりました
?>
stripslashes
「\」除去
unknown
文字列からバックスラッシュを除去した文字列を返します。
バックスラッシュが2つ並んでいる場合\\
は、1つのバックスラッシュ\
になります。
この関数と逆の動作(バックスラッシュを挿入)をする場合は、addslashes()関数を使用してください。
この関数は再帰的な処理を行わないため、多次元配列に適用する場合は、再帰的な関数を用意して使用する必要があります。
<?
# stripslashes()を使用してバックスラッシュを取り除く
$str = "Is your name O\'reilly?";
echo stripslashes($str); //Is your name O'reilly?
# stripslashes()を多次元配列に適用する場合
function stripslashes_deep($value){
$value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
return $value;
}
$array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar"));
$array = stripslashes_deep($array);
echo nl2br(print_r($array, true));
/*
Array(
[0] => f'oo
[1] => b'ar
[2] => Array(
[0] => fo'o
[1] => b'ar
)
)
*/
?>
stristr
文字列検索(大文字小文字の区別なし)
unknown
文字列の中に部分文字列が最初に見つかった位置から、部分文字列を含むそれ以降の文字列を返します。 部分文字列が見つからない場合はFALSEを返します。
部分文字列が文字列でない場合、整数に変換され、通常の文字列として適用されます。 文字列、部分文字列は大文字小文字を区別しません。
オプションの第3引数before_needle(PHP v5.3.0~)にTRUEを指定すると、文字列の中で最初に部分文字列が出現する位置より前の部分が戻り値になります。 デフォルトはFALSEです。
大文字小文字を区別して検索を行う場合は、strstr()関数を使用してください。
<?
#メールアドレスの@マークから最後までを出力する
$email = 'hoge@yahoo.co.jp';
echo stristr($email, '@')."<br>"; //@yahoo.co.jp
#メールアドレスの@マークから前の部分をを出力する(PHP v5.3.0~)
$email = 'hoge@yahoo.co.jp';
echo stristr($email, '@', true)."<br>"; //hoge
#部分文字列が含まれているか調べる
$str = 'abcdef';
if(!stristr($str, "B")) echo "'B'は、含まれていません";
else echo "'B'は含まれています";
//'B'は含まれています
#文字列でない部分文字列を使用する
$str = 'APPLE';
echo stristr($str, 97); // 97 = lowercase a
//APPLE
?>
strlen
文字列の長さを取得
unknown
1バイト1文字としてカウントされるため、半角は1文字、全角は2文字としてカウントされた結果が返ります。
マルチバイト対応版のstrlen()は、mb_strlen()関数(半角も全角も1文字として数える)を使用してください。
<?
#半角文字は1文字1カウント
$len = strlen("abcde");
echo $len."<br>"; //5
#全角文字は1文字2カウント
$len = strlen("あいうえお");
echo $len."<br>"; //10
?>
strnatcmp
自然順アルゴリズムで文字列比較
unknown
自然順アルゴリズム(人間が行うような手法)で英数字の文字列の順序を比較します。 大文字小文字は区別されます。 第1引数str1がstr2より小さい場合に負、大きい場合に正、等しい場合に0を返します。
<?
$arr1=$arr2=array("img12.png", "img10.png", "img2.png", "img1.png");
echo "標準の文字列比較\n";
usort($arr1, "strcmp");
echo nl2br(print_r($arr1, true));
/*
標準の文字列比較 Array
(
[0] => img1.png
[1] => img10.png
[2] => img12.png
[3] => img2.png
)
*/
echo "\n自然順での文字列比較\n";
usort($arr2, "strnatcmp");
echo nl2br(print_r($arr2, true));
/*
自然順での文字列比較 Array
(
[0] => img1.png
[1] => img2.png
[2] => img10.png
[3] => img12.png
)
*/
?>
strpbrk 
文字列中にある任意の文字を探す
unknown
文字列の中からchar_listを探し、見つかった文字から始まる文字列を返します。 見つからなかった場合はFALSEを返します。 大文字小文字は区別されます。
<?
$text='This is a Simple text.';
echo strpbrk($text, 'mi');
// 'i' が最初にマッチするから「is is a Simple text.」が出力される
// 大文字小文字が区別されるから「Simple text.」が出力される
echo strpbrk($text, 'S');
// Simple text.
?>
strpos
特定の文字列が最初に現れる位置を返す
unknown
文字列の中で、部分文字列が最初に現れる位置を数字で返します。 部分文字列が見つからない場合に、FALSEを返します。
strrpos()関数と異なり、この関数は引数部分文字列の文字列全体が検索対象となります。 大文字と小文字は区別されます。 部分文字列が文字列でない場合は数値に変換され、その結果が検索対象の文字列として適用されます。
オプションの第3引数検索開始位置(先頭は0)で検索を開始する文字列の文字を指定できます。 この場合も返される位置は文字列の先頭からの相対位置となります。
部分文字列の存在有無を調べる場合、この関数が返す値がFALSEでなく、0の場合もあるため、
==演算子を使い、if ( strpos( \str, \part) === FALSE) { 処理 }
のように記述するか、
is_numeric()関数を使用してif ( is_numeric( strpos( \str, \part ) ) ) { 処理 }
と記述する必要があります。
マルチバイト対応版のstrpos()は、mb_strpos()関数を使用してください。
<?
$str = "abcABCabc";
echo strpos($str, 'a'); //0 ('a'は先頭0番目に見つかる)
echo strpos($str, 'a', 5); //6 (先頭0から数えて5文字目以降で、 最初に見つかった'a'の位置を返す)
if(strpos($str, 'a') === false) echo "見つかりません";
else echo "見つかりました";
//見つかりました
if(!is_numeric(strpos($str, 'a'))) echo "見つかりません";
else echo "見つかりました";
//見つかりました
#マルチバイト対応のmb_strpos()関数
$str = "あいうえおあいうえお";
echo mb_strpos($str, 'あ'); //0 ('あ'は先頭0番目に見つかる)
echo mb_strpos($str, 'あ', 5); //5 (先頭0から数えて5文字目以降で、 最初に見つかった'あ'の位置を返す)
?>
strrchr
文字列が最後に現れる位置を返す
unknown
文字列中に、検索文字列が最後に現れる位置を取得し、その位置から文字列の終わりまでを返します。 検索文字列が見つからない場合は、FALSEを返します。
strstr()と異なり、検索文字列が1つ以上の文字を含んでいる場合は、最初の文字のみ使用されます。 部分文字列が文字列でない場合は整数に変換され、その結果が検索対象の文字列として適用されます。
オプションの第4引数double_encode(PHP v5.3.0~)にTRUEを指定すると、文字列の中で最初に部分文字列が現れる位置より前の部分が返り値になります。 デフォルトはFALSEです。
<?
# 最後の改行文字以降をすべて取得
$text = "Line 1\nLine 2\nLine 3";
$last = substr(strrchr($text, 10), 1 );
echo $last; // Line 3
# 拡張子チェック
function findExt($filename){
$exts = array(
'.jpg' => 'image',
'.png' => 'image',
'.php' => 'php',
'.html' => 'html',
'.swf' => 'flash',
'.gz' => 'compressed',
'.tar' => 'compressed',
);
$ext = strrchr($filename,'.');
if ($exts[$ext]) { return $exts[$ext]; }
else { return "unknown"; }
}
echo findExt("hoge.swf"); // flash
?>
strrev
文字列を逆順にする
unknown
指定した文字列を逆順にして返します。
<?
echo strrev("Hello world!"); //!dlrow olleH
?>
strripos
特定の文字列が最後に現れる位置を返す(大文字小文字の区別なし)
unknown
文字列中で、部分文字列が最後に現れた位置を返します。 文字列の位置は0始まりです。 見つからない場合は、FALSEが返されます。 strrpos()と異なり、この関数は大文字小文字は区別しません。
第2引数部分文字列には1文字あるいは複数の文字からなる文字列を指定します。
オプションの第3引数検索開始位置には、文字列のどこから検索を開始するかを指定します。 負の値を指定すると、文字列の先頭から数えて検索開始位置文字目から検索を開始します。
この関数が返す値がFALSEでなく、0や""といった値を返す場合もあるため、 この関数の返り値を調べるには、===演算子を使用してください。
<?
$haystack='ababcd';
$needle='aB';
$pos=strripos($haystack, $needle);
if($pos===false){
echo "'$needle'が'$haystack'の中に見つかりませんでした";
}else{
echo "'$needle'が最後に'$haystack'に現れた位置は'$pos'です";
}
// 'aB'が最後に'ababcd'に現れた位置は'2'です
?>
strrpos
特定の文字列が最後に現れる位置を返す(大文字小文字の区別なし)
unknown
文字列の中で、部分文字(単一文字)が最後に現れる位置を数字で返します。 部分文字列が見つからない場合に、FALSEを返します。 部分文字列が文字列でない場合は数値に変換されて、その結果が検索対象の文字列として適用されます。
PHP5.0.0 以降、検索開始位置により文字列中の任意の文字位置から検索を開始できるようになりました。 検索開始位置に “負の値”を指定した場合は、文字列の終端より前の任意の位置で検索を終了します。 またPHP 5.0.0 以降、部分文字列に空文字列を指定できなくなりました(必ず1文字以上の文字列を指定)。
マルチバイト対応版のstrrpos()は、mb_strrpos()関数を使用してください。
<?
$str = "abcABCabc";
echo strrpos($str, 'a'); //6
if(strrpos($str, 'a') === false) echo "見つかりません";
else echo "見つかりました";
//見つかりました
if(!is_numeric(strrpos($str, 'a'))) echo "見つかりません";
else echo "見つかりました";
//見つかりました
?>
strstr
特定の文字列が最初に現われる位置を返す
unknown
strchr()関数は、この関数のエイリアスです。
文字列の中で、部分文字列が最初に現れる位置を見つけ、部分文字列を含むそれ以降の文字列を返します。 部分文字列が見つからない場合に、FALSEを返します。 部分文字列が文字列でない場合は数値に変換され、その結果が検索対象の文字列として適用されます。
文字列、部分文字列は大文字小文字が区別されます。
大文字小文字の区別なしで検索を行う場合は、stristr()関数を使用してください。
<?
$str = "abcdef";
if(strstr($str, 'cd')) echo strstr($str, 'cd');
else echo "含まれていません";
//cdef
$str = "abcABCabcABC";
echo strstr($str, 'A'); //ABCabcABC
# before_needle = false
$email='name@example.com';
$domain = strstr($email, '@');
echo $domain; // @example.com
# before_needle = true(PHP v5.3.0~)
$user = strstr($email, '@', true);
echo $user; // name
?>
strtolower
大文字→小文字
unknown
文字列に含まれるアルファベットを全て小文字にして返します。 日本語が含まれている場合、アルファベットだけが置換されます。
<?
$retv = strtolower("Happy New Year");
echo($retv); //happy new year
?>
strtoupper
小文字→大文字
unknown
文字列に含まれるアルファベットを全て大文字にして返します。 日本語が含まれている場合、アルファベットだけが置換されます。
<?
$retv = strtoupper("Happy New Year");
echo($retv); //HAPPY NEW YEAR
?>
strtr
特定の文字を変換
unknown
string strtr ( string 文字列, array $replace_pairs )
文字列を検索し、fromに含まれる文字列が見つかると、そのすべてをtoの中にある対応する文字に置換して返します。 fromとtoの長さが異なる場合、長い方の余分な文字は無視されます。
第2引数fromには、toに変換される文字列を指定します。
第3引数toには、fromを置換する文字列を指定します。
オプションの第4引数replace_pairsは、toやfromの代わりに、array('from'=>'to', ...)
形式の配列として使用することができます。
<?
$username="hoge";
echo strtr("こんにちは、guestさん","guest",$username);
// こんにちは、hogetさん
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
// hello all, I said hi
?>
substr
文字列の一部分を返す
unknown
文字列の取出開始位置からバイト数分の文字列を返します。 文字列が取出開始位置と等しいまたは短い場合はFALSEが返されます。 取出開始位置が、文字列の長さより大きい場合は、空文字列が返されます。
取出開始位置 | 正 | 文字列の先頭0から数えて取出開始位置番目の文字から始まる文字列を返します。バイト数が指定されている場合は、指定されたバイト数分の文字列を返します。 |
---|---|---|
負 | 文字列の最後から数えて取出開始位置番目から始まる文字列を返します。バイト数が指定されている場合は、指定されたバイト数分の文字列を返します。 | |
バイト数 | 正 | 取出開始位置から数えてバイト数分の文字列を返します。 |
負 | 返される文字列は取出開始位置にある1文字のみが返される。 |
<?
#正の「取出開始位置」を指定
echo substr('abcdef', 1)."<br>"; // 'bcdef'を返す
echo substr('abcdef', 1, 3)."<br>"; // 'bcd'を返す
echo substr('abcdef', 0, 4)."<br>"; // 'abcd'を返す
echo substr('abcdef', 0, 8)."<br>"; // 'abcdef'を返す
#負の「取出開始位置」を指定
echo substr('abcdef', -1)."<br>"; // 'f' を返す
echo substr('abcdef', -2)."<br>"; // 'ef' を返す
echo substr('abcdef', -3, 1)."<br>"; // 'd' を返す
#負の「バイト数」を指定
echo substr('abcdef', 0, -1)."<br>"; // 'abcde'を返す
echo substr('abcdef', 2, -1)."<br>"; // 'cde'を返す
echo substr('abcdef', 4, -4)."<br>"; // ''を返す
echo substr('abcdef', -3, -1)."<br>"; // 'de'を返す
#取出開始位置が文字列の長さより大きい場合
echo (! substr('abcdef', 10)) ? "false" : "true"; // false
?>
substr_compare
指定位置から指定長の2つの文字列ヲバイナリ対応で比較
unknown
メイン文字列のoffset文字目以降の最大length文字を、文字列と比較します。 メイン文字列のoffset以降が文字列より小さい場合に負、大きい場合に正、等しい場合に0を返します。 offsetがメイン文字列の長さ以上でかつlengthが設定されている場合は、警告が発生しFALSEを返します。
第3引数offsetには、比較を開始する位置を指定します。 負の値を指定した場合(PHP v5.1.0~)は、文字列の最後から数えられます。
オプションの第4引数lengthには、比較する長さを指定します。 デフォルトは0です。
オプションの第5引数case_insensitivityにTRUEを指定すると、大文字小文字の区別なしに比較します。 デフォルトはFALSEです。
<?
echo substr_compare("abcde", "bc", 1, 2); // 0
echo substr_compare("abcde", "de", -2, 2); // 0
echo substr_compare("abcde", "bcg", 1, 2); // 0
echo substr_compare("abcde", "BC", 1, 2, true); // 0
echo substr_compare("abcde", "bc", 1, 3); // 1
echo substr_compare("abcde", "cd", 1, 2); // -1
echo substr_compare("abcde", "abc", 5, 1); // 警告
?>
substr_count
副文字数の出現回数を数える
unknown
文字列の中で部分文字列が何回出現するかを数え、その出現回数を整数で返します。 部分文字列は、大文字小文字が区別されます。 また、この関数は重複する部分文字列をカウントしません。
オプションの第3引数offset(PHP v5.1.0~)には検索を開始する位置を指定します。 デフォルトは0(先頭から)です。
オプションの第4引数lengthには、指定したoffset以降に部分文字列で検索する最大長を指定します。 offsetとlengthの合計が、文字列より長い場合は警告が発生します。
<?
$text = 'This is a test';
# テキストの文字数
echo strlen($text); // 14
# 'is'の出現回数
echo substr_count($text, 'is'); // 2
# 文字列は 's is a test' になっている
echo substr_count($text, 'is', 3); // 1
# テキストは 's i' になっている
echo substr_count($text, 'is', 3, 3); //0
# 5+10 > 14 のため警告発生
echo substr_count($text, 'is', 5, 10);
# 重複している部分文字列はカウントされない
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd'); // 1
?>
substr_replace
文字列の一部を置換
unknown
文字列の置換開始位置からバイト数分の範囲を、置換文字列で置換します。 文字列が配列の場合は、配列が返されます。 オプションの第4引数バイト数を省略すると、文字列の終端まで置換されます。
置換開始位置 | 正 | 文字列の先頭0から数えて置換開始位置番目の文字から置換。 |
---|---|---|
負 | 文字列の後ろから数えて置換開始位置番目の文字から置換。 | |
バイト数 | 正 | 文字列の置換される部分の長さを表す。 |
負 | 置換を停止する位置が文字列の後ろから数えて何バイト分かを表す。 |
<?
$var = "0123/567/";
$rep = "abc";
#$varを$repに置換
echo substr_replace ($var, $rep, 0); //abc
echo substr_replace ($var, $rep, 0, strlen ($var)); //'abc'
#$varの先頭に$repを挿入
echo substr_replace($var, $rep, 0, 0); //'abc0123/567/'
#$varの「567」を$repに置換
#(先頭0から数えて)5番目から最後まで
echo substr_replace($var, $rep, 5, -1); //'0123/abc/'
#最後から4番目から最後まで
echo substr_replace($var, $rep, -4, -1); //'0123/abc/'
#「567」を削除(先頭0から数えて5番目から最後まで、空文字列にする)
echo substr_replace($var, '', 5, -1); //'0123'
#$imgの拡張子を「jpeg」→「gif」に置換(先頭0から数えて7番目から4バイト分を"gif"に置換
$img = '012345.jpeg';
echo substr_replace($img, 'gif', 7, 4); //'012345.gif'
#先頭0から数えて7番目から最後まで「gif」に置換
#オプション引数引数「バイト数」を省略すると終端まで置換される
echo substr_replace($img, 'gif', 7); //'012345.gif'
?>
trim
左右空白除去(\n,\r,\tも削除, 全角の空白は削除不可)
unknown
文字列の先頭および末尾にある空白文字を除去して返します。 オプションの第2引数charlistを省略すると、以下の文字が削除されます。
正規表現 | ASCII文字セット | 説明 |
---|---|---|
"" | (ASCII 32 (0x20)) | 通常の空白 |
"\t" | (ASCII 9 (0x09)) | タブ |
"\n" | (ASCII 13 (0x0D)) | 改行 |
"\r" | (ASCII 10 (0x0A)) | リターン |
"\0" | (ASCII 0 (0x00)) | NULバイト |
"\x0B" | (ASCII 11 (0x0B)) | 垂直タブ |
削除する文字を指定する場合は、charlistに削除したい全ての文字をリストにして指定します。
# \binaryの始めにあるASCII制御文字(0~31まで)のみ削除
trim (\binary, "\x00..\x1F" );
- 文字列の先頭にある空白文字のみ除去する場合は、ltrim()関数を使用してください。
- 文字列の末尾にある空白文字のみ除去する場合は、rtrim()関数、chop()関数を使用してください。
<?
#配列の値をトリミング(array_map使用)
$ary = array(
'hello' => ' bye ',
'hey' => ' howdie',
'haai' => ' today'
);
$trim_ary = array_map('trim', $ary);
print_r($trim_ary); //Array ( [hello] => bye [hey] => howdie [haai] => today )
#配列の値をトリミングする(ユーザー定義関数)
function trim_value($value){
$trimed_ary = array();
foreach($value as $key => $val){
$trimed_ary[$key] = trim($val);
}
return $trimed_ary;
}
$fruit = array('apple','banana ', ' cranberry ');
foreach(trim_value($fruit) as $key => $val){
echo "'" . $val . "'<br>";
}
/*
'apple'
'banana'
'cranberry'
*/
?>
ucfirst
最初の文字を大文字にする
unknown
指定した文字列の先頭の文字がアルファベットであれば、その文字をを小文字に変換し、変換後の文字列を返します。
逆に、先頭の文字を小文字に変換するには、lcfirst()を使用します。
<?
$retv = ucfirst("this is a pen.");
echo($retv); //This is a pen.
?>
ucwords
文字列の各単語の最初の文字を大文字にする
unknown
文字列の各単語の最初の文字を大文字にし、変更後の文字列を返します。 文字がアルファベットの場合、文字列の各単語の最初の文字を大文字にします。 単語の定義は、空白文字(スペース、フォームフィールド、改行、キャリッジターン、水平タブ、垂直タブ)の直後にあるあらゆる文字からなる文字列です。
<?
$foo = 'hello world!';
echo $foo = ucwords($foo); // Hello World!
$bar = 'HELLO WORLD!';
echo $bar = ucwords($bar); // HELLO WORLD!
echo $bar = ucwords(strtolower($bar)); // Hello World!
?>
vfprintf 
フォーマット文字列をファイルに書き込む
unknown
フォーマットによって作成された文字列を、指定したファイルポインタに書き込みます。 戻り値として、出力された文字列の長さを返します。 fprintf()と同じ動作をしますが、可変引数ではなく、引数の配列を受け取って処理する点が異なります。
<?
# ISO 形式にフォーマットした日付を date.txt に書き込みます
if (!($fp = fopen('date.txt', 'w')))
return;
$tday=getdate();
$length=vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
echo $length; // 書き込まれた文字列の長さ:10
?>
vprintf
フォーマット文字列を出力
unknown
フォーマットによって作成された文字列を出力します。 戻り値として、出力された文字列の長さを返します。 printf()と同じ動作ですが、可変長引数ではなく、配列を引数として受け取って処理する点が異なります。
<?
vprintf("%04d-%02d-%02d", explode('-', '1988-8-1')); // 1988-08-01
?>
vsprintf
フォーマット文字列を返す
unknown
フォーマットによって作成された文字列を返します。 sprintf()と同じ動作ですが、可変長引数ではなく、配列を引数として受け取って処理する点が異なります。
<?
print vsprintf("%04d-%02d-%02d", explode('-', '1988-8-1')); // 1988-08-01
?>
wordwrap
文字列を指定した文字数に、指定した分割文字で分割
unknown
文字列を文字数毎に分割文字で分割して返します。
デフォルトは75カラム毎に\n
で分割されます。
オプションの第2引数文字数、オプションの第3引数分割文字を省略するとデフォルトが適用されます。
オプションの第4引数cutに1を指定すると、文字列は常に指定した幅で分割されます。 そのため、指定した幅よりも長い単語は単語の途中で分割されます。
<?
$text = "My dog is small and cute like a doll!";
$newtext = wordwrap($text, 20, "<br>\n");
echo $newtext;
/* 出力コード
My dog is small and<br>
cute like a doll!
*/
#オプション引数cutに1を指定すると、
#指定した文字数より長い単語は、
#単語の途中で分割される
$text = "I like gooooooooooooooooogle!";
$newtext = wordwrap($text, 8, "<br>\n", 1);
echo "$newtext\n";
/*
I like<br>
gooooooo<br>
oooooooo<br>
oogle!
*/
?>