2022/04/21
関数とはいくつかの処理をまとめて入れておくものです。
PHPでは最初から用意されている内部関数(ビルトイン関数)と自分で定義する「ユーザ定義関数」があります。
ここでは「内部関数」についてまとめていきます。
INDEX
sprintf関数
引数に指定した値を指定の形式にフォーマットした文字列を取得します。
### 構文
sprintf(文字列のフォーマット, 入力したい文字1, 入力したい文字2, ...);
### 実例①
# 「%s」は文字列、「%d」は数値を代入
$text = sprintf("本日は%d年%d月%d日です。", "2020", "4", "20");
# 「本日は2020年4月20日です。」と出力
echo $text;
### 実例② 0埋め
# 「0001111」と表示
echo sprintf('%07d', 1111);
### 実例③ ページャー
# LIMIT句($startRowから$maxRowsまで)
$sql_limit = sprintf("%s LIMIT %d, %d", $sql, $startRow, $maxRows);
substr関数/mb_substr関数
文字列の中から指定した位置から指定した分だけ文字を取り出します。
substr関数
### 構文
# 「文字数」は省略可
substr(対象文字列, 開始位置, 文字数);
### 実例
# 「学習張」と表示
# マルチバイト文字列(ひらがなや漢字)を切り出すことができない
echo substr('laravel学習張', 7);
mb_substr関数
### 構文
# 「文字数」「エンコーディング」は省略可
mb_substr(対象文字列, 開始位置, 文字数, エンコーディング);
### 実例
# 「学習張」と表示
# マルチバイト文字列(ひらがなや漢字)を切り出すことができる
echo substr('ララベル学習張', 4, 3, "UTF-8");
explode関数
文字列を文字で分割し、配列にして返す。
### 構文
# 第三引数は省略可
# よく似た関数にsplit関数があるが、PHP7では削除されている
explode(区切り文字, 入力文字, 最大要素数);
### 実例①
$strings = "red,blue,yellow,green";
$colors_array = explode("," , $strings);
# 入力文字を区切り文字(この場合カンマ)で分割して配列を返します
# Array( [0]=>red [1]=>blue [2]=>yellow [3]=>green )
print_r($colors_array);
### 実例②
# URLパラメータを配列に格納
$params = explode("&", $_SERVER['QUERY_STRING']);
strstr/stristr関数
文字列の中で特定の文字があるかないかを判断したい場合に使います。
・strstr関数 アルファベットの大文字と小文字を区別
・stristr関数 大文字と小文字を区別しない
### 構文
strstr(対象の文字列, 検索したい文字列);
### 実例①
$email = 'info@laraweb.net'
# 出力 laraweb.net
echo strstr($email, 'l');
### 実例②
// URLに "laraweb.net" が含まれているか調べる
if(strstr($url, 'laraweb.net')){
echo "laravel学習張のサイトです";
}else{
echo "laravel学習張のサイトではありません";
}
isset関数/empty関数
変数に値がはいっているかどうかをチェックする。
isset関数
isset関数は「変数に値が入っているか」「null でないか」によって true か false を返すものです。
NULLは特別な値で、何も無いことを示します。変数にNULLが入っていても、「何もセットされていない」と判断されます。
$var='';
これは空ですが、isset関数では、空の値がセットされていると判断(true)されます。変数そのものが定義されていない場合にfalseを返します。
### 構文
isset($変数);
if( isset($変数) ){
変数がセットされているときの処理
}else{
変数がセットされていないときの処理
}
### 実例
if isset(!isset($_POST['***']){
$error = '***が設定されていません'
}
empty関数
emptyがtrueになる条件は
・空白の数値
・文字列、配列、数値の0
・文字列の半角の0
・NULLやFALSE
・変数が定義されただけの状態
### 構文
empty($変数);
### 実例
$var=0;
$n=empty($var);
# 出力:1
echo $n;
値 | if($var) | isset | empty | is_null |
---|---|---|---|---|
$var=1 | true | true | false | false |
$var=""; 空文字 | false | true | true | false |
$var=0; 整数の0 | false | true | true | false |
$var=NULL; | false | false | true | true |
$var; 変数が未定義 | false | false | true | true |
$var=array(); 配列の初期化 | false | true | true | false |
$var=array(1) | true | true | false | false |
str_replace関数/preg_replace関数
PHPでの置換処理は str_replace関数 を使用します。
正規表現で検索したい場合は後述する preg_replace関数
を使用します。
str_replace関数
対象のデータの中に指定した文字列が存在したら置換する処理。
### 構文
str_replace(検索文字, 置換文字, 置換対象の文字列);
### 実例
$new_str = str_replace('Laravel', 'Vue.js', 'Laravel学習張');
# 出力:Vue.js学習張
echo $new_str;
preg_replace関数
### 構文
preg_replace('/正規表現パターン/', 置換後の文字列, 置換対象の文字列);
### 実例①
$str = 'apple orange melon apple';
$new_str = preg_replace('/(apple)/', 'banana', $str);
# 出力:banana orange melon banana
echo $new_str;
### 実例②
# 改行コード(\nまたは\rまたは\r\n)を改行タグに置き換える
$str = preg_replace('/\r\n|\r|\n/', '<br>',$str);
文字クラス | |
---|---|
[abc] | a,b,c いずれかの一文字 |
[^abc] | a,b,c 以外の一文字 |
[A-Z] | 大文字のアルファベット一文字 |
[0-9] | 数字一文字 |
\t | タブ |
\n | 改行 |
量子定子 | |
* | 0回以上の繰り返し |
+ | 1回以上の繰り返し |
? | 0回または1回の出現 |
メタ文字 | |
^ | 行頭 |
$ | 行末 |
| | いずれかの文字列 |
() | グループ化 |
\ | 直後のメタ文字をエスケープする |
ファイルの有無を確認(file_exists関数)
PHPでのファイルの有無の確認は file_exists関数 を使用します。
引数にはファイルシステムパスとファイル名を指定します。
※HTTPアドレスでは機能しないので注意!
ファイルがある場合は true を、その他の場合は false を返します。
# 実例
if (file_exists(public_path() . "/img/1.gif")) {
return "/img/1.gif";
}
# NG
if (file_exists("www.mysite.com/img/1.gif")) {
return "/img/1.gif";
}
APIへデータ送信(file_get_contents関数)
file_get_contents を使って POST 送信
file_get_contents を使って JSON を送信
正規表現でマッチ(preg_match関数)
ある文字列に対して、
- 「XXで始まって○○で終わる」
- 「○○または△△またはXXを含む」
- 「□の後に○△が続く」
などの複雑な検索や置換を行うパターンをチェックしたい場合です。
// 構文
// パターン文字列 → 検索するパターンを表現する文字列(正規表現)
// 入力文字列 → 検索する対象の文字列
// 戻り値:マッチに成功した場合は1(true)、失敗は0(false)が返る
論理値 = preg_match(パターン文字列,入力文字列)
// すべて数値であるか調べる
$inputData = 1234;
if(preg_match('/^[0-9]+$/, $inputData')) echo '正しい'; else echo '不正';
// ^ と $ の場合、データ末尾に改行が含まれていてもマッチ(1)を返してしまう
// その場合は \A と \z を使う
if(preg_match('/\A[0-9]+\z/, $inputData')) echo '正しい'; else echo '不正';
// 半角数字
[0-9]
// 半角数字(エスケープシーケンス)
\d
// 全角数字
[0-9]
// 半角か全角のいずれか
[0-90-9]
ファイルの存在チェック(file_exists関数)
file_exists関数はファイルの存在チェックをするメソッドです。
表示画面で、その画像があるかないかの判定で使います。
if ( file_exists( $_SERVER['DOCUMENT_ROOT'].'/temp/test.txt' )) {
echo "ファイルが存在します。";
} else {
echo "ファイルが存在しません。";
}
$_SERVER['DOCUMENT_ROOT'] はドキュメントルートの物理パスを表示します。
また、何か思いついたら追記していこうと思います。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。