RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【PHP入門】よく使う関数 まとめ

こんにちは、tatsumiです。

いきなりですが、PHPの標準で用意されている関数について、いくつぐらい知っていますか?
私は今までPHPでの開発経験がなく、7月ごろからPHPの勉強を始めたので、正直ほとんど知りません。。。
ただ、実際にPHPの開発に携わるようになって、関数を知っていることの重要性を改めて実感しました。

PHPを始め、どの言語でも言えることですが、
コードを読むのも、コードを書くのも、関数を”知っている”か”知らない”かで大きく変わってきます。

例えば、コードを読む場合、
関数を知っていればある程度スラスラ読めますが、関数を知らないと新たな関数が出てくる度に調べないといけなくなります。

また、コードを書く場合は、
コードを読む場合と同様に関数を知らないと毎回調べることになりますし、
場合によっては標準で用意されている関数を使わずに自力で実装してしまう、というケースもあると思います。
(実際に私も、自力で実装した後に関数が用意されていることを知ってショックを受けた経験が何度かあります。。。)

PHPでは多くの関数が標準で用意されています。
この記事では、その中でカテゴリ別によく使いそうなPHPの関数をまとめてみました。
PHPを使う際、こういう関数ってないのかなって思った時の参考にしてもらえればと思います。

www.php.net

文字列操作関数

PHP: String 関数 - Manual

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日です。"

?>

日付と時刻関数

PHP: 日付・時刻 関数 - Manual

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

ファイル操作関数

PHP: ファイルシステム 関数 - Manual

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");

?>

数学関数

PHP: Math - Manual

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

?>

変数操作関数

PHP: 変数操作 関数 - Manual

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: 配列 関数 - Manual

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ライフを!


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.