php 文字列絡みの関数
2011/04/20
細かい書式は他で調べて欲しい。あくまで早見表的な扱い。
含まれている個数
- substr_count(str, find)
- [str]内の[find]をカウント
- substr_count(str, find, n)
- [str]内の最初の[n]文字を削除して残りの[find]以降を対象にカウント
「substr_count('abc@def@ghi', '@', 2)」だったら最初の2文字を削除した「c@def@ghi」を対象にカウントする - substr_count(str, find, n, m)
- [str]内の最初の[n]文字を削除した残りから[m]文字分を対象にカウント
「substr_count('abc@def@ghi', '@', 2, 4)」だったら最初の2文字を削除して残った「c@def@ghi」から最初の4文字の「c@def」を対象にカウント
マルチバイト:日本語OK
- mb_substr_count(str, find)
- [str]内の[find]をカウント
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
※substr_count()のように「最初の2文字を削除」とかはできないっぽい
文字数の調査
- strlen(str)
- [str]の文字数(nバイトしてカウント)→全角文字があると変。
マルチバイト:日本語OK
- mb_strlen(str)
- [str]の文字数(n文字してカウント)
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
出現位置の調査
- strpos(str, find)
- [str]に[find]が出現する位置を調査(nバイト目として調査)→全角文字があると変。
マルチバイト:日本語OK
- mb_strpos(str, find)
- [str]に[find]が出現する位置を調査(n文字目として調査)
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
存在するかチェック
- strstr(str, find)
- 結果が「false」の場合、存在しない
※本来の目的(?)→[str]に[find]が含まれる場合、[find]は含むそれ以降の文字を取得。 - stristr(str, find)
- 結果が「false」の場合、存在しない(大文字・小文字の区別なし)
※strstr()の大文字・小文字を区別しないバージョン
正規表現
- preg_match(find, str)
- [str]に[find]が存在するかチェック
存在するもの自体を抜きだし(正規表現)
- preg_match(find, str, match)
- [str]に[find]が存在するかチェックをして、存在するなら[find]自体を[match]の[0]に入れる。
※「preg_match('/<.*?>/',"re<_0_>cat<_1_>nap",$match);」としたら「$match[0]」に「<_0_>」がはいる。 - preg_match_all(find, str, matchs)
- preg_match()は最初の一つだけど、preg_match_all()は全部。[matchs]のあとにパラメータをいれれば色々とできる。
※「preg_match('/<.*?>/',"re<_0_>cat<_1_>nap",$match);」としたら「$match[0][0]」に「<_0_>」、「$match[0][1]」に「<_1_>」がはいる。
空白削除
- trim(str)
- [str]に含まれる最初(左側)と最後(右側)の空白文字を削除
- ltrim(str)
- [str]に含まれる最初(左側)の空白文字を削除
- rtrim(str)
- [str]に含まれる最後(右側)の空白文字を削除
一部取得
- strstr(str, find)
- [str]に[find]が含まれる場合、[find]を含むそれ以降の文字を取得。
「strstr('aaa@bbb','@')」の場合、戻り値は「@」を含む以降の文字列なので「@bbb」。
※「strstr('aaa@bbb@ccc','@')」の場合、戻り値は最初の「@」を含む以降の文字列になり「@bbb@ccc」。 - strstr(str, find, TRUE)
- [TRUE]があり、[str]に[find]が含まれる場合、[find]を含まないそれ以前の文字を取得。
※php5.3.0以降
「strstr('aaa@bbb','@',TRUE)」の場合、戻り値は「@」を含まない以前の文字列なので「aaa」。
※「strstr('aaa@bbb@ccc','@')」の場合、戻り値は最初の「@」を含まない以前の文字列なので「aaa」。 - stristr(str, find)
- strstr()の大文字・小文字を区別しないバージョン
- stristr(str, find, TRUE)
- strstr()の大文字・小文字を区別しないバージョン
- substr(str, start, n)
- [str]の[start]バイト目から[n]バイト取得
マルチバイト:日本語OK
- mb_substr(str, start, n)
- [str]の[start]文字目から[n]文字取得
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
置換え
- str_replace(find, replce, str)
- [str]の[find]を[replce]に置換え。
- str_ireplace(find, replce, str)
- str_replace()の大文字・小文字を区別しないバージョン
- substr_replace(str, replce, n, m)
- [str]の[n]バイトから[m]バイトを[replce]に置換え。
※[m]を省略で最後まで。
マルチバイト版は無いので自作してみた→「php substr_replaceのマルチバイト版」
正規表現
- preg_replace(find, replce, str)
- [str]の[find]を[replce]に置換え。)
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
[find]は「/xxx/」的な感じで記述するけど「utf8」の場合「/xxx/u」をつけて置いたほうが無難かも。
分割(配列に変換)
- split(find, str)
- [str]を[find]で分割
※php5.3.0以降非推奨 - explode(find, str)
- [str]を[find]で分割
正規表現
- preg_split(find, str)
- [str]を[find]で分割>
配列を文字列に変換
- implode(delimiter, $ary)
- 区切り文字[delimiter]で配列[$ary]を結合して文字列に変換
文字列の長さ
- strlen(str)
- [str]の長さ(nバイトとして数える)
マルチバイト:日本語OK
- mb_strlen(str)
- [str]の長さ(n文字として数える)
「ini_set("mbstring.internal_encoding", "utf8");」が必要な場合もある。
型変換
- intval(str)
- 文字型の[str]を「数値」に変換
- ""+$num
- 数値型の[$num]を文字型に変換
「$str=""+$num」としてあげる。 - gettype(str)
- [str]の型を取得。
「$type=gettype($num)」って感じで型を取得する