PHPで文字列を処理する時に知っていると便利な関数をまとめておきます。正確な定義は公式リファレンスをどうぞ。
文字列の前後の余計な特殊文字を取り除く
結果の文字列 = trim ( “元の文字列” [, 取り除く文字のリスト])
第2引数を指定しないとデフォルトで次の文字を削除してくれる
- ” ” (ASCII 32 (0x20)), 通常の空白。
- “\t” (ASCII 9 (0x09)), タブ。
- “\n” (ASCII 10 (0x0A)), リターン。
- “\r” (ASCII 13 (0x0D)), 改行。
- “\0” (ASCII 0 (0x00)), NULバイト
- “\x0B” (ASCII 11 (0x0B)), 垂直タブ
■ 関連関数
- ltrim() : 先頭から余計な特殊文字を取り除く
- rtrim() : 末尾から余計な特殊文字を取り除く
文字エンコードの変換
変換後の文字列 = mb_convert_encoding(“元の文字列”, “UTF-8”, “auto”) ;
第2引数:変換後の文字エンコーディング
第3匹数:返還前の文字エンコーディング(autoは、日本語では”ASCII, JIS, UTF-8, EUC-JP, SJIS”の意味)
文字列の長さを調べる
int 長さ = strlen ( “調べたい文字列” )
戻り値:空文字列の場合は0を返す
※改行などの特殊文字も1文字とカウントする
■ 関連関数
- mb_strlen() : strlenのマルチバイト文字列用関数
文字列の検索
int 見つけた場所 = strpos(“長い文字列”, “調査文字列”)
戻り値:見つからなかった場合は、FLASEを返す。先頭で見つけた場合は0を返す。そのため、評価には===を用いる。
■ 関連関数
- strstr() : 文字列が最初に現れた場所以降の文字列を返す
- mb_strspos() : strposのマルチバイト文字列用関数
- mb_strstr() : strstrのマルチバイト文字列用関数
文字列のパターン検索
int マッチ回数 = preg_match(“パターン正規表現”, “長い文字列”, マッチ文字列の配列)
戻り値:見つからなかった場合は0を返す。見つかった場合は1を返す。(見つかった時点で検索を止める)
マッチした文字列の配列:
Array( [0] => Array ( [0] => def [1] => 0 ))
見つかった文字列を表示したい場合は、次のようにする。
preg_match('/^http:[\/0-9a-z\.]+/i', $html_text, $matches);echo $matches[0];
■ パターンの指定
☆グループ指定
[a-z] : アルファベット1文字 [0-1] : 数字1文字☆メタ文字
. : 改行以外の1文字
^ : 行頭
$ : 行末
その他エスケープが必要な文字 : \, [, ], |, (, ), ?, *, +, {, }, -,
\ : エスケープ(続く文字をメタ文字ではなく、その文字として認識する)
\n : 改行
\s : 半角スペース1文字
☆繰り返し指定
* : 0回以上の繰り返し。{0,}と同じ。
+ : 1回以上の繰り返し。{1,}と同じ。
? : 0回か1回。{0,1}と同じ。
☆パターン修飾子
i : 大文字小文字区別なし
u : マルチバイト指定
■ 関連関数
preg_match_all() : 文字列の最後まで何回マッチしても検索する
日付を示す文字列を内部的な時間に変換
int Unix タイムスタンプ = strtotime ( “日付を示す文字列”)
戻り値:失敗した場合は、FALSEを返す。
■例
$time = strtotime("now");$time = strtotime("+1 day");$time = strtotime("+1 week");$time = strtotime("2012/06/10 22:30:05");$time = strtotime("2012-06-10");$time = strtotime("last Monday");
内部的な時間表現を文字列に変換
日付の文字列 = date (“フォーマット”, Unixタイムスタンプ)
■例
$date_str = date("Y/m/d H:i:s", $time);
■フォーマット
format 文字 |
説明 | 戻り値の例 | |
---|---|---|---|
年 | Y | 年。4 桁の数字。 | 例: 2012 |
y | 年。2 桁の数字。 | 例: 03 | |
月 | F | 月。フルスペルの文字。 | January から December |
m | 月。数字。先頭にゼロをつける。 | 01 から 12 | |
M | 月。3 文字形式。 | Jan から Dec | |
n | 月。数字。先頭にゼロをつけない。 | 1 から 12 | |
t | 指定した月の日数。 | 28 から 31 | |
日 | d | 日。二桁の数字(先頭にゼロがつく場合も) | 01 から 31 |
D | 曜日。3文字のテキスト形式。 | Mon から Sun | |
j | 日。先頭にゼロをつけない。 | 1 から 31 | |
w | 曜日。数値。 | 0 (日曜)から 6 (土曜) | |
z | 年間の通算日。数字。(ゼロから開始) | 0 から 365 | |
週 | W | ISO-8601 月曜日に始まる年単位の週番号 (PHP 4.1.0 で追加) | 例: 42 (年の第 42 週目) |
時 | a | 午前または午後(小文字) | am または pm |
A | 午前または午後(大文字) | AM または PM | |
B | Swatch インターネット時間 | 000 から 999 | |
g | 時。12時間単位。先頭にゼロを付けない。 | 1 から 12 | |
G | 時。24時間単位。先頭にゼロを付けない。 | 0 から 23 | |
h | 時。数字。12 時間単位。 | 01 から 12 | |
H | 時。数字。24 時間単位。 | 00 から 23 | |
i | 分。先頭にゼロをつける。 | 00 から 59 | |
s | 秒。先頭にゼロをつける。 | 00 から 59 | |
u | マイクロ秒 (PHP 5.2.2 で追加)。 | 例: 654321 | |
タイムゾーン | e | タイムゾーン識別子(PHP 5.1.0 で追加) | 例: UTC, GMT, Atlantic/Azores |
I (大文字の i) | サマータイム中か否か | 1ならサマータイム中。 0ならそうではない。 | |
O | グリニッジ標準時 (GMT) との時差 | 例: +0200 | |
P | グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 (PHP 5.1.3 で追加)。 | 例: +02:00 | |
T | タイムゾーンの略称 | 例: EST, MDT … | |
Z | タイムゾーンのオフセット秒数。 UTC の西側のタイムゾーン用のオフセットは常に負です。そして、 UTC の東側のオフセットは常に正です。 | -43200 から 50400 | |
全ての日付/時刻 | c | ISO 8601 日付 (PHP 5 で追加されました) | 2004-02-12T15:19:21+00:00 |
r | » RFC 2822 フォーマットされた日付 | 例: Thu, 21 Dec 2000 16:01:07 +0200 | |
U | Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数 | time() も参照 |