こんにちは、tatsumiです。
いきなりですが、PHPの標準で用意されている関数について、いくつぐらい知っていますか?
私は今までPHPでの開発経験がなく、7月ごろからPHPの勉強を始めたので、正直ほとんど知りません。。。
ただ、実際にPHPの開発に携わるようになって、関数を知っていることの重要性を改めて実感しました。
PHPを始め、どの言語でも言えることですが、
コードを読むのも、コードを書くのも、関数を”知っている”か”知らない”かで大きく変わってきます。
例えば、コードを読む場合、
関数を知っていればある程度スラスラ読めますが、関数を知らないと新たな関数が出てくる度に調べないといけなくなります。
また、コードを書く場合は、
コードを読む場合と同様に関数を知らないと毎回調べることになりますし、
場合によっては標準で用意されている関数を使わずに自力で実装してしまう、というケースもあると思います。
(実際に私も、自力で実装した後に関数が用意されていることを知ってショックを受けた経験が何度かあります。。。)
PHPでは多くの関数が標準で用意されています。
この記事では、その中でカテゴリ別によく使いそうなPHPの関数をまとめてみました。
PHPを使う際、こういう関数ってないのかなって思った時の参考にしてもらえればと思います。
文字列操作関数
strlen/mb_strlen(文字列の長さを取得)
strlen(文字列) : int |
---|
文字列の長さ(バイト数)を取得します。 文字数を取得したい場合は「mb_strlen」関数を使います。 |
実行結果は以下のようになります。
<?php strlen('abc') --> 3 strlen('あいう') --> 6 ?>
<?php mb_strlen('abc') --> 3 mb_strlen('あいう') --> 3 ?>
strcmp/strcasecmp(文字列を比較)
strcmp(文字列1, 文字列2) : int |
---|
PHPで文字列の比較を行います。 比較結果として返される値は以下の通りです。 文字列1 < 文字列2 ⇒ 負の整数 文字列1 > 文字列2 ⇒ 正の整数 文字列1 = 文字列2 ⇒ 0 「strcmp」関数では大文字と小文字は区別されます。もし区別したくない場合は「strcasecmp」関数を使います。 |
実行結果は以下のようになります。
<?php strcmp('abc', 'def') --> -197379 strcmp('abc', 'ABC') --> 2105376 strcmp('abc', 'abc') --> 0 ?>
<?php strcasecmp('abc', 'def') --> -3 strcasecmp('abc', 'ABC') --> 0 strcasecmp('abc', 'abc') --> 0 ?>
関数を使わず==や===でも比較することができます。
ただし、それぞれで微妙に比較結果が変わるため、用途に合わせてどれを使うかを検討しましょう。
substr/mb_substr(文字列を取り出す)
substr(文字列, 開始位置 [, 文字数]) : string |
---|
PHPで開始位置から文字数分の文字列を抽出します。 「substr」関数はマルチバイト文字に対応していないため、日本語を用いる場合は「mb_substr」関数を使いましょう。 |
実行結果は以下のようになります。
<?php substr('abcde', 0) --> "abcde" substr('abcde', 1) --> "bcde" substr('abcde', 1, 3) --> "bcd" ?>
<?php mb_substr('あいうえお', 0) --> "あいうえお" mb_substr('あいうえお', 1) --> "いうえお" mb_substr('あいうえお', 1, 3) --> "いうえ" ?>
引数の開始位置や文字数に負の数を指定した場合は、末尾からの開始位置、文字数になります。
<?php substr('abcde', -3) --> "cde" substr('abcde', 1, -1) --> "bcd" ?>
<?php mb_substr('あいうえお', -3) --> "うえお" mb_substr('あいうえお', 1, -1) --> "いうえ" ?>
trim(先頭と末尾の空白を取り除く)
trim(文字列 [, 取り除く文字]) : string |
---|
文字列の先頭と末尾から、空白文字を取り除きます。 取り除く文字が指定されている場合は、文字列の先頭と末尾から指定された文字を取り除きます。 ※「trim」関数で空白文字と見なされるのは" \t\n\r\0\x0B"なので、タブや改行を含みます。 |
実行結果は以下のようになります。
<?php trim(' abc ') --> "abc" trim(' abc ', 'x') --> " abc " trim('xxxabcxxx', 'x') --> "abc" ?>
PHPでは他に、先頭だけを対象にする「ltrim」関数や末尾だけを対象にする「rtrim」関数もあります。
substr_replace/preg_replace(文字列を置換)
substr_replace(文字列1, 文字列2, 開始位置 [, 文字数]) : string |
---|
文字列1の開始位置以降の文字列を文字列2で置換します。 文字数が指定されている場合は、開始位置から指定された文字数分を置換します。 |
実行結果は以下のようになります。
<?php substr_replace('1234567890', '#', 5) --> "12345#" substr_replace('1234567890', '#', 5, 2) --> "12345#890" ?>
PHPでは、引数の開始位置や文字数に負の数を指定した場合は、末尾からの開始位置、文字数になります。
「preg_replace」関数を使うと、正規表現を使用した置換が可能です。
preg_replace(検索文字列, 文字列1, 文字列2) |
---|
文字列1の中で、検索文字列に合致した文字列を文字列2へ置換します。 検索文字列は、正規表現を使った文字列を指定できます。 |
strpos/preg_match(文字列を探す)
strpos(文字列1, 文字列2 [, 検索開始位置]) : int/false |
---|
文字列1の中で、文字列2が最初に現れる位置を探します。 文字列2が含まれない場合は、FALSEを返します。 |
実行結果は以下のようになります。
<?php strpos('abcdeabcde', 'c') --> 2 strpos('abcdeabcde', 'f') --> FALSE strpos('abcdeabcde', 'c', 3) --> 7 ?>
「preg_match」関数を使うと、正規表現を使用した検索が可能です。
preg_match(文字列1, 文字列2 [, 配列] [, 動作フラグ] [, 検索開始位置]) : int/false |
---|
文字列1の中に文字列2が含まれるかを確認します。 含まれる場合は1、含まれない場合は0を返します。 文字列2には、正規表現を使った文字列を指定できます。 |
strstr(指定文字以降の文字列を取得)
strstr(文字列1, 文字列2) : string/false |
---|
文字列1の中に文字列2が含まれるかを確認します。 含まれる場合は、文字列2を含んだ文字列の終わりまでを返します。 |
実行結果は以下のようになります。
<?php strstr('abcdefg', 'cd') --> "cdefg" strstr('abcdefg', 'xyz') --> FALSE ?>
substr_count(文字列をカウント)
substr_count(文字列1, 文字列2) : int |
---|
文字列1の中で文字列2の出現回数を返します。 |
実行結果は以下のようになります。
<?php substr_count('aabbbcccc', 'b') --> 3 substr_count('aabbbcccc', 'd') --> 0 ?>
str_repeat(文字列の反復)
str_repeat(文字列, 反復回数) : string |
---|
文字列を反復回数分繰り返します。 |
実行結果は以下のようになります。
<?php str_repeat("abc", 3) --> "abcabcabc" ?>
str_pad(文字埋め)
str_pad(文字列, 文字列の長さ, 埋める文字, 文字埋めタイプ) : string |
---|
文字列の左、右、または両側を文字列の長さに合わせて、埋める文字で埋めます。 埋め込む位置は、文字埋めタイプで指定します。 左埋め:STR_PAD_LEFT、右埋め:STR_PAD_RIGHT、両側埋め:STR_PAD_BOTH |
実行結果は以下のようになります。
<?php str_pad("abc", 8, "X", STR_PAD_LEFT) --> "XXXXXabc" str_pad("abc", 8, "X", STR_PAD_RIGHT) --> "abcXXXXX" str_pad("abc", 8, "X", STR_PAD_BOTH) --> "XXabcXXX" ?>
PHPでは、埋める文字が指定されていない場合は、空白で埋められます。
埋める文字数が埋める文字の長さで均等に分割できない場合は、切り捨てられるので注意。
(マルチバイト文字を使用するときも注意)
<?php str_pad("abc", 5, "12345", STR_PAD_LEFT) --> "12abc" str_pad("abc", 8, "あああああ", STR_PAD_RIGHT) --> 文字埋め部分が文字化けしてしまう ?>
explode(文字列を分割)
explode(区切り文字, 文字列 [, 要素数]) : array |
---|
文字列を区切り文字で分割します。 要素数が指定されている場合は、先頭から要素数分を分割し、残りの文字列は配列の最後に格納されて返されます。 |
実行結果は以下のようになります。
<?php explode(" ", "aaa bbb ccc") --> ["aaa", "bbb", "ccc"] explode(" ", "aaa bbb ccc", 2) --> ["aaa", "bbb ccc"] ?>
PHPでは、文字列を分割する関数として「preg_split」関数や「str_split」関数もあります。
「explode」関数が簡単で汎用的に使えますが、用途に応じてPHPの関数を使い分けましょう。
sprintf(フォーマット)
sprintf(フォーマット文字列 [, 任意の文字や値...]) : array |
---|
フォーマット文字列に従い、任意の文字や値を使って文字列を生成します。 |
実行結果は以下のようになります。
<?php sprintf("今日は%d年%d月%d日です。", 2021, 11, 1) --> "今日は2021年11月1日です。" ?>
日付と時刻関数
date(現在日付を取得)
date(フォーマット [, 日時]) : string |
---|
現在日時をフォーマットに指定された形式で返します。 日時を指定した場合は、指定した日時をフォーマットに指定された形式で返します。 |
実行結果は以下のようになります。
<?php date("Y年m月d日 H:i:s") --> "2021年11月1日 10:30:00" ※ 現在日時が返される date("Y年m月d日 H:i:s", mktime(12, 0, 0, 11, 1, 2021)) --> "2021年11月1日 12:00:00" ?>
フォーマットで使用できるフォーマット文字は以下のとおりです。
フォーマット文字 | 意味 |
---|---|
a | am または pm |
A | AM または PM |
d | 2桁の日付 |
D | 3文字の曜日(Sun~Sat) |
f | 月の英字(フルスペル) |
h | 12時間単位の時間(00~12) |
H | 24時間単位の時間(00~23) |
g | 先頭に0をつけない12時間単位の時間(0~12) |
G | 先頭に0をつけない24時間単位の時間(0~24) |
i | 2桁の分(00~59) |
j | 先頭に0をつけない日付(1~31) |
l | 曜日の英字(フルスペル) |
L | 閏年は1、それ以外は0 |
n | 先頭に0をつけない月(0~12)) |
m | 2桁のの月(01~12) |
M | 3文字の月(Jan~Dec) |
s | 2桁の秒(00~59) |
S | 英文の序数を表わす接尾語 (th ~ nd) |
t | 指定した月の日数(28~31) |
U | UNIX時間(1970年1月1日からの秒数) |
w | 数値で示す曜日(0~6) |
y | 西暦(下2桁) |
Y | 西暦(4桁) |
z | その年の1月1日からの通算日 |
Z | タイムゾーンのオフセット秒(-43200~43200) |
getdate(日付を配列で取得)
getdate( [日時] ) : array |
---|
指定された日時の日付情報を配列で返します。 日時を指定しない場合は、現在日時の日付情報を配列で返します。 |
実行結果は以下のようになります。
<?php $today = getdate() $today["year"] ---> "2021" $today["mon"] ---> "11" $today["mday"] ---> "1" ?>
返される配列のキーは以下のとおりです。
配列のキー | 値 | 値の例 |
---|---|---|
seconds | 秒 | 0~59 |
minutes | 分 | 0~59 |
hours | 時 | 0~23 |
mday | 月単位の日 | 1~31 |
wday | 曜日の数値 | 0(日曜)~6(土曜) |
mon | 月 | 1~12 |
year | 年 | 4桁の西暦年数 |
yday | 年単位の日 | 0~365 |
weekday | 曜日の文字列 | Sunday~Saturday |
month | 月の文字列 | January~December |
checkdate(日付の妥当性をチェック)
checkdate(月, 日, 年) : bool |
---|
指定された日付が妥当かを確認します。 |
実行結果は以下のようになります。
<?php checkdate(11,1,2021) ---> true checkdate(13,1,2021) ---> false ?>
各パラメータのチェック内容は以下のとおりです。
パラメータ | チェック内容 |
---|---|
month | 1~12の間かどうか |
day | 指定されたmonthの日数の範囲内かどうか。(yearが閏年の場合も考慮される) |
year | 1~32767の間かどうか |
mktime(指定した日付のタイムスタンプを取得)
mktime(時, 分, 秒, 月, 日, 年) : int |
---|
引数で指定された日付のタイムスタンプを返します。 |
実行結果は以下のようになります。
<?php mktime(12,30,30,11,1,2021) ---> 1635769830 ?>
time(現在時刻を取得)
time() : int |
---|
現在時刻のタイムスタンプを返します。 |
実行結果は以下のようになります。
<?php time() ---> 1636085273(現在時刻のタイムスタンプ) ?>
gettimeofday(現在時刻を取得)
gettimeofday() : array |
---|
現在時刻情報を配列で返します。 |
実行結果は以下のようになります。
<?php $currentTime = gettimeofday(); currentTime["sec"] ---> 1636085273(現在時刻のタイムスタンプ値) ?>
返される配列のキーは以下のとおりです。
配列のキー | 値 |
---|---|
sec | タイムスタンプ値 |
usec | マイクロ秒の値 |
minuteswest | GMTとの差を分で表した値 |
dsttime | サマータイムなら1、そうでない場合は0 |
ファイル操作関数
copy(ファイルをコピーする)
copy(コピー元のパス, コピー先のパス) : bool |
---|
コピー元のファイルをコピー先にコピーします。 成功した場合はtrue、失敗した場合はfalseが返されます。 |
コピー先にファイルが既に存在する場合は上書きされるので注意!
サンプルコードは以下のとおりです。
<?php copy("example.txt", "example.txt.bak") ?>
fopen(ファイルを開く)
fopen(ファイル名, モード) : resource |
---|
ファイルを指定されたモードで開きます。 ファイル名には、ファイルパスを含んだファイル名を指定します。 |
サンプルコードは以下のとおりです。
<?php fopen("/home/example/file.txt", "r") ?>
モードには以下があります。
モード | 意味 | ファイル ポインタ |
ファイルが存在しない場合の挙動 |
---|---|---|---|
r | 読み込みモードで開く | 先頭 | エラー |
r+ | 読み込み/書き込みモードで開く | 先頭 | エラー |
w | 書き込みモードで開く(ファイルの内容をクリア) | 先頭 | ファイルを新規作成 |
w+ | 読み込み/書き込みモードで開く(ファイルの内容をクリア) | 先頭 | ファイルを新規作成 |
a | 書き込みモードで開く(ファイルの内容はクリアせず追記) | 末尾 | ファイルを新規作成 |
a+ | 読み込み/書き込みモードで開く(ファイルの内容はクリアせず追記) | 先頭 | ファイルを新規作成 |
x | 書き込みモードで開く(ファイルが既に存在している場合はエラー) | 先頭 | ファイルを新規作成 |
x+ | 読み込み/書き込みモードで開く(ファイルが既に存在している場合はエラー) | 先頭 | ファイルを新規作成 |
c | 書き込みモードで開く(ファイルの内容はクリアせず先頭から追記) | 先頭 | ファイルを新規作成 |
c+ | 読み込み/書き込みモードで開く(ファイルの内容はクリアせず先頭から追記) | 先頭 | ファイルを新規作成 |
fclose(ファイルを閉じる)
fclose(ファイルポインタ) : bool |
---|
ファイルを閉じます。 成功した場合はture、失敗した場合はfalseを返します。 |
サンプルコードは以下のとおりです。
<?php $file = fopen("/home/example/file.txt", "r"); fclose($file); ?>
fgetc(ファイルから1文字取得)
fgetc(ファイルポインタ) : string |
---|
指定されたファイルポインタから1文字読み出します。 EOFの場合はfalseを返します。 |
サンプルコードは以下のとおりです。
<?php $file = fopen("/home/example/file.txt", "r"); fgetc($file); ?>
fgets/fgetss(ファイルから1行取得)
fgets(ファイルポインタ) : string |
---|
指定されたファイルポインタから1行読み出します。 |
サンプルコードは以下のとおりです。
<?php $file = fopen("/home/example/file.txt", "r"); fgets($file); ?>
PHPの「fgetss」関数を使うと、取得した文字列からHTMLタグを取り除いた形の文字列を取得できます。
使い方は「fgets」関数と同様です。
fpassthru(ファイル内容すべてを取得)
fpassthru(ファイルポインタ) : int |
---|
ファイルポインタを EOF まで読み込み、結果を出力バッファに書き出します。 戻り値として、出力した文字数を返します。 この関数を実行後、「fclose」関数を実行しなくてもファイルは自動的に閉じられます。 |
PHPでファイルの先頭から出力する場合は、当関数を実行する前に「rewind」関数でポインタをリセットしておきましょう。
サンプルコードは以下のとおりです。
<?php $file = fopen("/home/example/file.txt", "r"); fpassthru($file); ?>
fread(ファイルから指定した文字数分取得)
fread(ファイルポインタ, 取得するバイト数) : string |
---|
指定されたファイルポインタから指定されたバイト数分の文字を取得します。 |
第二引数は、文字数ではなくバイト数なので注意!
サンプルコードは以下のとおりです。
<?php $file = fopen("/home/example/file.txt", "r"); fread($file, 10); ?>
第二引数に「filesize」関数を使ってファイルサイズを指定すると、ファイル全文を取得できます。
readfile(ファイルを出力)
readfile(ファイル名) : string |
---|
ファイルの内容を出力します。 戻り値として、読み込んだバイト数を返します。 |
サンプルコードは以下のとおりです。
<?php readfile("/home/example/file.txt"); ?>
filesize(ファイルサイズを取得)
filesize(ファイル名) : int |
---|
ファイルのサイズを取得します。 |
サンプルコードは以下のとおりです。
<?php filesize("/home/example/file.txt"); ?>
file_exists(ファイルの存在チェック)
file_exists(ファイル名) : int |
---|
ファイルまたはディレクトリが存在するかどうかを確認します。 存在する場合はtrue、存在しない場合はfalseを返します。 |
サンプルコードは以下のとおりです。
<?php file_exists("/home/example/file.txt"); ?>
数学関数
abs(絶対値)
abs(数値) : int/float |
---|
指定された数値の絶対値を返します。 指定された数値がfloat型であった場合、戻り値の方もfloat型になります。 それ以外の場合はint型が返されます。 |
実行結果は以下のようになります。
<?php abs(100) ---> 100 abs(-100) ---> 100 ?>
ceil(端数の切り上げ)
ceil(数値) : float |
---|
指定された数値から、次に大きい整数を返します。 |
実行結果は以下のようになります。
<?php ceil(100.1) ---> 101 ceil(-100.1) ---> -100 ?>
floor(端数の切り捨て)
floor(数値) : float |
---|
指定された数値を超えない範囲で、最大の整数を返します。 |
実行結果は以下のようになります。
<?php floor(100) ---> 100 floor(100.1) ---> 100 floor(-100.1) ---> -101 ?>
max(最大値を取得)
max(比較する値1, 比較する値2 ... ) : mixed |
---|
比較する値の中で最大値を返します。 比較する値には、文字列も指定可能です。また、配列で渡すこともできます。 |
異なる型の値を引数として渡すのはやめましょう
実行結果は以下のようになります。
<?php max(2,4,6,8,10) ---> 10 $array = array(5,8,3,10,1); max($array) ---> 10 ?>
min(最小値を取得)
min(比較する値1, 比較する値2 ... ) : mixed |
---|
比較する値の中で最小値を返します。 比較する値には、文字列も指定可能です。また、配列で渡すこともできます。 |
異なる型の値を引数として渡すのはやめましょう
実行結果は以下のようになります。
<?php min(2,4,6,8,10) ---> 2 $array = array(5,8,3,10,1); min($array) ---> 1 ?>
変数操作関数
empty(変数が空かチェック)
empty(変数) : bool |
---|
指定された変数が空の場合はtrue、空でない場合はfalseを返します。 |
「empty」関数の結果一覧
値 | 結果 |
---|---|
$val = 1 | false |
$val = "" | true |
$val = "0" | true |
$val = 0 | true |
$val = NULL | true |
$val | true |
$val = array() | true |
$val = array(1) | false |
intval(変数を整数値として取得)
intval(変数, 基数) : int |
---|
引数の基数の値を基数とし、変数に指定された値をint型で返します。 基数が0の場合は、変数の値に基づいて基数を判断します。 変数の先頭が"0x"の場合は16進数、"0"の場合は8進数、それ以外の場合は10進数となります。 |
実行結果は以下のようになります。
<?php intval(123) ---> 123 intval('123') ---> 123 intval('+123') ---> 123 intval('-123') ---> -123 intval(0123) ---> 83 intval('0123') ---> 123 intval(123, 8) ---> 123 intval('123', 8) ---> 83 intval(true) ---> 1 intval(false) ---> 0 ?>
PHPでfloat型を扱いたい場合は、変数をfloat値で取得する「floatval」関数もあります。
strval(変数を文字列として取得)
strval(変数) : string |
---|
変数に指定された値を文字列に変換してstring型で返します。 |
実行結果は以下のようになります。
<?php strval(123) ---> 123 ?>
settype(変数を指定した型に変換)
settype(変数, 型) : bool |
---|
変数の値を指定された型に変換します。 変換に成功した場合はtrue、失敗した場合はfalseを返します。 |
型に指定できる値
- "boolean"/"bool"
- "integer"/"int"
- "float"/"double"
- "string"
- "array"
- "object"
- "null"
実行結果は以下のようになります。
<?php $value = 123; settype($value, "bool") ---> $value = 1 settype($value, "int") ---> $value = 123 settype($value, "float") ---> $value = 123 settype($value, "string") ---> $value = 123 settype($value, "array") ---> $value[0] = 123 ?>
gettype(指定した変数の型を取得)
gettype(変数) : string |
---|
指定された変数の型を返します。 |
型のチェックには、この関数ではなく「is_*」関数を使いましょう。
返される文字列
- "boolean"
- "integer"
- "double" (float の場合は、"float" ではなく "double" が返されます)
- "string"
- "array"
- "object"
- "resource"
- "resource (closed)" (PHP 7.2.0 以降)
- "NULL"
- "unknown type"
実行結果は以下のようになります。
<?php $value = 1; gettype($value) ---> integer $value = 0.2; gettype($value) ---> double $value = NULL; gettype($value) ---> NULL $value = 'abc'; gettype($value) ---> string ?>
配列関数
PHPの配列に関しては、別の記事でまとめられていますので、そちらを参考にしてみてください。
PHPの配列機能のまとめ - RAKUS Developers Blog | ラクス エンジニアブログ
本記事では、上記記事で紹介されていないPHPの関数について記載します。
array(配列を生成する)
array(値1, 値2, 値3 ...) : array |
---|
指定された値を用いて配列を作成します。 引数に指定した値に対して、0から添字が自動的に割り振られます。 値に"index => values"の形式で値を指定することで、連想配列を生成できます。 |
実行結果は以下のようになります。
<?php $values = array("りんご", "バナナ", "いちご"); $values[0] ---> りんご $values[1] ---> バナナ $values[2] ---> いちご $values = array("a" => "りんご", "b" => "バナナ", "c" => "いちご"); $values["a"] ---> りんご $values["b"] ---> バナナ $values["c"] ---> いちご ?>
list(配列を値を変数に代入する)
list(変数1, 変数2, 変数3 ...) : array |
---|
配列の値を変数に代入します。 |
実行結果は以下のようになります。
<?php $values = array("りんご", "バナナ", "ぶどう"); list($apple, $banana, $grape) = $values; $apple ---> りんご $banana ---> バナナ $grape ---> ぶどう ?>
PHP よく使う関数 まとめ
本記事では、PHPの関数についてまとめてみました。
今回紹介したPHPの関数はごく一部で、PHPでは他にもたくさんの関数が用意されていますので、他にどんなPHPの関数があるのか興味があれば調べてみてください。
PHPでコードを書くときに、そういえばこんな関数あったな、と思い出せるだけでも全然違ってくると思います。
PHPの関数は自分で作成することもできるので、PHPの標準で用意されていない関数があれば、自分で作ってみましょう。
それでは良きPHPライフを!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com