PHP 自分の備忘録

IT関連

PHPの備忘録です。間違っていたらすみません。

  1. 事前知識
    1. 文字コード
    2. 文字化けが起きたとき調べるところ
    3. エスケープシーケンス
  2. 基礎
    1. コメントアウト
    2. 文字の結合
    3. ヒアドキュメント
    4. エスケープ処理(サニタイジング)
  3. 変数と定数
    1. 変数名の決まり
    2. 定数を定義 const
    3. 定数を定義 define
    1. データ型
    2. 変数の型を調べる
    3. 型変換
    4. 変数のデータを消去
  4. 四則演算
    1. 加算(足し算)
    2. 減算(引き算)
    3. 除算(割り算)
    4. 剰余(割り算のあまり)
    5. 累乗計算
    6. 単項演算子
    7. 加算代入(足しこみ)
    8. 符号を逆転する
  5. 条件文
    1. if文
      1. if基本形
      2. else形
      3. elseif形
      4. elseif & else形
    2. 等しくない(型無視)
    3. Switch文
    4. 比較演算子
    5. 値の評価
    6. 論理演算子
    7. 条件演算子
  6. ループ文
    1. for文
    2. while文
    3. do while文
    4. ループの中で処理をスキップする continue
    5. ループを抜ける break
    6. 与えられた整数回数足しこむ
    7. n個の文字列を出力する
    8. 与えられた文字数からカウントダウン
    9. ファイルから配列へ
    10. while文のエレガントな書き方
    11. while文の書き方
    12. do-whileの書き方
    13. foreachで配列の値を全て取り出す 配列read
    14. foreachで連想配列の値を取り出す
    15. readして連想配列をchainしてoutput
    16. 連想配列から条件を指定したり並び替えて連送配列へ
  7. 関数類
    1. 絶対値を返す abs
    2. 小数点以下を切り捨て floor
    3. 小数点以下を切り上げ ceil
    4. 整数の下2桁を切り捨てする(割引)
    5. ROUNDDOWNする
    6. 大文字に変換 strtoupper
    7. 文字の切り出し substr
    8. 文字の出現数のカウント substr_count
    9. 配列の値の数を数える array_count_value
    10. 何文字目にあるかを探す strpos、mb_strpos
    11. 指定文字が含まれるかどうか str_contains
    12. 文字列から数字だけを取り出す preg_replace
    13. 2進数を10進数に変換する bindec
    14. 10進数を2進数に変換する decbin
    15. 行の先頭や行末のスペースを取り除く trim
    16. ランダム値を取得する rand
    17. ランダムを取得する mt_rand
    18. 四捨五入 round
    19. 小数の桁を指定して表示する number_format
    20. 文字の置換 str_replace
      1. 置き換え元を配列にできる
      2. 置き換え元と後を配列で指定することもできる
      3. 置き換え対象を配列にすることもできる
      4. 配列の単語ごとに置き換える
    21. 位置と桁数を指定して置換 substr_replace
    22. 指定した文字数で文字列を改行する wordwrap
    23. 文字列を反転させ逆順にする strrev
    24. 文字数の長さ strlen、mb_strlen
    25. 数字の先頭を0で桁埋め sprintf
    26. 数字の0埋め str_pad
    27. 配列から最大値/最小値 max/min
    28. 連想配列でmaxとmin
    29. 連想配列でカウント
    30. 配列にある値を検索してインデックスを返す
    31. 文字列を数値・整数に変換する
    32. 10進数を2進数に変換する
    33. 配列から先頭の要素を取り出す array_shift
    34. 配列の末尾から要素を取り除く array_pop
    35. 配列の先頭を後方に移動し、元ある要素を左にずらす
    36. 配列の最後を先頭に移動し、元ある要素を右にずらす
    37. 配列の先頭の要素に挿入し右にずらす。array_unshift
    38. 配列の最後の要素の後ろに挿入する array_push
    39. 配列の重複した要素を削除する array_unique
    40. 配列の中身が全て同じか調べる array_unique&count
  8. 文字列と数字数値の判定
    1. 数字かどうかを判定する is_numeric
    2. 整数値かどうかを判定する is_int
    3. 文字列かどうかを判定する ctype_digit
  9. 関数
    1. 関数を作る
    2. 関数に引数を渡す
    3. returnで値を返す関数
    4. 関数の外で定義された変数を関数内で使いたい global
    5. 無名関数
    6. 関数の引数の型付け
    7. 可変長引数
    8. 配列を返す関数(複数の戻り値)
  10. 配列
    1. 配列とは
    2. 配列の初期化
    3. 作り方① ひとつづつ順番に値を代入していく
      1. 注意
    4. ②ひとつづつキー名を指定して要素を作る
    5. ③カギカッコで代入
    6. ④array関数を使う方法(インデックス配列の場合)
    7. ⑤array関数を使う場合(連想配列の場合)
    8. ⑥explodeで分割して放り込む
    9. ⑦文字列からstr_spritで流し込む
    10. 配列の中身をすべてわかりやすく表示する
    11. 配列に配列の値を追加する
    12. 要素の削除
    13. 配列の要素数 count
    14. 配列を使ったランダムくじびき
    15. N数分、配列を準備する。(席数確保例)
    16. 配列の並び替え(昇順)sort
    17. 配列の並び替え(降順)rsort
    18. 配列の数値を合計する array_sum
    19. 配列の数値を乗算する array_product
    20. 配列の数値の平均を出す
    21. 特定の値が配列の中に含まれているか in_array
  11. 連想配列
    1. カギカッコを使う
    2. array関数を使う
    3. 入力値からアイテムをwhileで合計する
    4. 連想配列に追加
    5. 連想配列の書き換え
    6. 連想配列の削除
    7. 連想配列を値で並び替え(昇順) asort
    8. 連想配列を値で並び替え(降順) arsort
    9. 連想配列をキーで並び替え(昇順) ksort
    10. 連想配列をキーで並び替え(降順) krsort
    11. 複数行を連想配列に入れるやり方
  12. 二次元配列
    1. 2次元配列
    2. 出現回数をカウントする
    3. 二次元配列の値を取り出す
  13. 日付
    1. date関数
    2. 日付の計算
    3. 標準時間の設定
  14. 便利関数
    1. ディレクトリ情報を取得 dirnama
  15. その他
    1. 標準入力からの取得

事前知識

文字コード

PHPはUTF-8N(ボムなし)で保存する。BOMはByte Order Markの略称。

改行コードはLinuxに入れる場合はLFで。

  • LF(UNIX.Linux.MacOS)
  • LF+CR(Windows)

文字化けが起きたとき調べるところ

1.PHPファイルを保存したときの文字コード
2.PHPファイル内で指定した文字コード(meta charset)
3.サーバ内の文字コード
4.PHPインタプリタ内の文字コード
5.表示するブラウザの文字コード

エスケープシーケンス

これを知っておかないと「It’s」などのシングルクォーテーションを使う文字や、ダブルクォーテーションの中でダブルクォーテーションを使う場合に表現できない。

バックスラッシュはMacの場合「Option+¥」で出せる。

 

基礎

コメントアウト

文字の結合

文字や変数をつなげるときはドットでつなぐ

ヒアドキュメント

あまり使いどころはわからないけど、改行や字下げが保持される。

終端記号はEOTでなくても構わない。

’EOT’とすれば変数は展開されない、ナウドキュメント。”EOT”にすれば変数を埋め込める、ヒアドキュメント。

エスケープ処理(サニタイジング)

別名サニタイジング(消毒、無毒化)。この処理をしておかないと、ユーザーから受け取った文字列がそのままブラウザに展開されてしまうので、不正なコードを実行させられてしまう。

 

変数と定数

変数名の決まり

・変数の前には$をつける
・一文字目は半角アルファベットか半角アンダースコア
・二文字目は半角アルファベットか半角アンダースコアか半角数字
・アルファベットの大文字・小文字は区別される。
・ハイフンは使えない
・変数名の後ろは半角スペースをあける。空けたくない場合は{}で括る。

定数を定義 const

定数は$を付けてはいけない。慣習的に定数名は大文字で書くこと。

定数を定義 define

constとの違いはdefineは関数なので、引数には関数でもOK。

 

データ型

変数には複数の型がある。PHPは文字を勝手に数値として判断してくれるような曖昧な特徴があるので注意。

  • 文字列(string型)・・・’hello’ “world”
  • 整数(int型)  ・・・ 4 や -10
  • 浮動小数点数(float型) ・・・1,8 や -3.2
  • null(ヌル、ナル) ・・・null
  • 真偽値(bool型) ・・・true や false
  • 配列(array型) ・・・[5,3,10]
  • オブジェクト(object型) ・・・ new Object()

変数の型を調べる

変数の型はvar_dumpやgetTypeで調べることができる。

型変換

型変換をする方法にキャストというやり方がある。(型)を前に置く。変数に対しても使える。

変数のデータを消去

 

四則演算

加算(足し算)

減算(引き算)

除算(割り算)

剰余(割り算のあまり)

累乗計算

どちらでもOK

単項演算子

加算代入(足しこみ)

符号を逆転する

 

条件文

if文

if基本形

else形

elseif形

elseif & else形

 

 

等しくない(型無視)

等しくない場合は、!=(型無視)、!==(型も含む)。<>は使えない。

Switch文

いわゆるselect文。上から順に比較する。各比較にbreakを付けること。

breakがあればそこでswitch文を抜けるが、breakがなければ引き続き次のcase比較をし続けてしまう。

case文を2つ書けばor条件のように判定してくれる。

比較演算子

比較演算子の基本。

 

 

 

 

値の評価

以下の場合はfalse判定、それ以外はtrueとなる。$x = 3をIF文の条件式に入れればTrue判定になる。

 

論理演算子

andやorで真偽値を取る演算子。

条件演算子

0未満の場合は0、それ以外はそのまま表示する。ifを使えば5行必要だが条件演算子を使えば1行で済む。

読みにくいので仕組みを理解しておく程度。

 

ループ文

for文

ループする回数が決まっている場合はfor文が良い。カウンターは慣習的に$iを使うことが多い。

 

while文

ある条件が満たされている間、特定の処理を行う。

最初から条件が満たされていない場合は何も処理しない。

 

do while文

とりあえず一度は処理を実行させたい場合

ループの中で処理をスキップする continue

continueを使って処理を飛ばす。

 

ループを抜ける break

continueは読み飛ばしだが、完全にループ自体を抜けるときに使う。

与えられた整数回数足しこむ

n個の文字列を出力する

与えられた文字数からカウントダウン

ファイルから配列へ

while文のエレガントな書き方

while文の書き方

whileで指定した条件に合致したら継続してループし、外れたら抜ける。

do-whileの書き方

最初一回は必ず実行したいときはdo-whileを使う。

whileで指定した条件に合致したら継続してループし、外れたら抜ける。

 

foreachで配列の値を全て取り出す 配列read

元の配列が$arrayでasの右に値となる変数。

foreachで連想配列の値を取り出す

 

readして連想配列をchainしてoutput

連想配列から条件を指定したり並び替えて連送配列へ

 

関数類

絶対値を返す abs

絶対値とは原点からの距離、0を中心にどれだけ離れたか。マイナスの符号を消せばいい。

小数点以下を切り捨て floor

小数点以下を切り上げ ceil

整数の下2桁を切り捨てする(割引)

1080円を1000円や、1250円を1200円にする。
例えば1080を100で割ると10.8それをfloorすると10になり、X100すると1000円。
1250を100で割ると12.5になり、12になり、X100すると1200円になる。

ROUNDDOWNする

PHPはROUNDしかなく強制的に四捨五入されてしまうので、ROUNDDOWNは難しいみたい。円周率を2桁でROUNDDOWNする場合は簡単だが、10桁の場合はちょうど繰り上がりする。

大文字に変換 strtoupper

文字の切り出し substr

ビルトイン関数

固定長のデータを扱うときなどにも便利。最後までの場合は第3引数は省略してもよい。

文字の出現数のカウント substr_count

その文字列の中に、特定の文字が存在する回数。

配列の値の数を数える array_count_value

この関数を配列に対して使うと、その値をキーにして出現回数をカウントして連想配列で返す

何文字目にあるかを探す strpos、mb_strpos

日本語などのマルチバイト文字はmb_strposを使用すること。

 

strposの注意点

文字が含まれるかを判定するときに

とするとechoは出力されない。strposの返り値0はIF文の中ではFalseとして認識される。

ゆえに含むかどうかを判定する場合は

とすること。厳密に判定しないとダメなので!=もNG。

指定文字が含まれるかどうか str_contains

PHP8から適用されたらしい。日本語も動いた。含むか含まないかを調べるならstrposより使いやすいかも。

 

文字列から数字だけを取り出す preg_replace

 

2進数を10進数に変換する bindec

11111なら16+8+4+2+1なので

10進数を2進数に変換する decbin

31を二進数に変換すると11111

行の先頭や行末のスペースを取り除く trim

ビルトイン関数

 

ランダム値を取得する rand

引数1が最小値、引数2が最大値で指定

 

ランダムを取得する mt_rand

ドットインストールで使っていた。通常のrandよりも高速らしい。引数の指定は同じ。

 

四捨五入 round

小数の桁を指定して表示する number_format

カンマ区切りを追加する。小数点の桁を表示することもできる。

通常はroundで事足りるが、0をroundした場合は、少数桁は表示されず0となる。number_formatを使ってあげるとよい。

文字の置換 str_replace

置き換え元を配列にできる

aiueoの母音を削除する

置き換え元と後を配列で指定することもできる

置き換え対象を配列にすることもできる

配列の単語ごとに置き換える

 

 

位置と桁数を指定して置換 substr_replace

ビルトイン関数

指定した文字数で文字列を改行する wordwrap

wrapは回り込ませるという意味だったと思う。trueをつけない場合は単語として認識されるものは、その位置で回り込まないようになる。

 

文字列を反転させ逆順にする strrev

 

 

文字数の長さ strlen、mb_strlen

ビルトイン関数

日本語などのマルチバイト文字はmb_strlenを使用する。

数字の先頭を0で桁埋め sprintf

ビルトイン関数

数字の0埋め str_pad

配列から最大値/最小値 max/min

連想配列でmaxとmin

ややこしそうに見えるがキーと値は並列の1行もの。maxやminの結果はあくまで値の最大値と最小値を返す。キーは関係ない。

 

連想配列でカウント

これも上記と同じ。キーと値は並列の1行もの。キーと値の1対の数がcountで返される。

 

配列にある値を検索してインデックスを返す

 

文字列を数値・整数に変換する

キャスト演算子を使う

intval関数を使う。変換できない文字列を渡した場合は0になります。小数点以下の切り捨てにも使える。

10進数を2進数に変換する

 

配列から先頭の要素を取り出す array_shift

配列の先頭の要素(一番左)を取り出して他の要素も左に詰める。

戻り値をとるようにすれば、取り出した要素の値を受け取れる

 

配列の末尾から要素を取り除く array_pop

 

配列の先頭を後方に移動し、元ある要素を左にずらす

「あいうえお」の「あ」を後方に持っていき、「いうえお」を先頭側にずらし「いうえおあ」にするやり方。

 

配列の最後を先頭に移動し、元ある要素を右にずらす

array_popで末尾のデータを抜き取れ、array_shiftを使えば配列の先頭に追加できる。両方とも使えば実現できる。

 

配列の先頭の要素に挿入し右にずらす。array_unshift

第1引数に配列を、第2引数に挿入したい値を入れる。

挿入された他の要素は右にずれる、というか再度番号が振り直される感じ。

第2引数以降のパラメータも増やしてもいいみたい。順番は下記の通り。

 

配列の最後の要素の後ろに挿入する array_push

普通に$array[] =とした方がいい。関数を使うとその分のオーバーヘッドが必要になる。

配列の重複した要素を削除する array_unique

配列の要素に重複した値があれば、要素ごと削除します。

おそらく配列の初めから順に見ていき、すでにあるものは要素ごと消し去る。

配列の中身が全て同じか調べる array_unique&count

文字列が全部同じ文字かどうかを調べるとき3個程度ならIF文でできるが、10文字もあれば大変。そういうときarray_uniqueでも調査できる。

 

文字列と数字数値の判定

数字かどうかを判定する is_numeric

型が文字列であっても数値に変換できるものは数値として判定される面倒な仕様

整数値かどうかを判定する is_int

’99’などの文字列はfalseになってしまう。型として文字のものは文字として認識されるので良い仕様。

文字列かどうかを判定する ctype_digit

’99’は文字と認識されtrueになる。型として文字なものは文字として認識するので良い仕様。

 

 

関数

 

関数を作る

同じ処理を繰り返す場合は関数としてまとめる。

 

関数に引数を渡す

関数を呼び出すときに値を渡す。

関数を定義しているときの引数は仮置きしているので仮引数、実際に関数を呼び出すときに渡す引数は実引数という。

引数を渡さなかった場合のデフォルト値を定義する場合は$ad = ‘値’とする。

 

returnで値を返す関数

関数内でreturnと書けばその時点で値が戻されて、それ以降の処理は無視される。

関数内にechoで値を吐き出すだけよりも、値を返す方が利用価値はあがる。

デフォルト値を= 0で定義すると引数の数を減らすこともできる。

 

関数の外で定義された変数を関数内で使いたい global

PHPでは関数の外で定義された変数は、関数の中で使うことはできない。使うときはglobalを使う。

 

但し上記の処理は見にくくなるので、変数の値を引数として渡すか、関数内で使う変数は関数内で定義する方がいい。

グローバルスコープ、ローカルスコープ、同じ変数であっても定義は別。

 

無名関数

関数自体を値として使ったり、関数自体を別の関数の引数として使うことができるので便利。

 

関数の引数の型付け

関数に使う引数に型を指定することもできる。

ただし、PHPは数字に見える文字は自動で型変換されてしまう。型変換されたくない場合はstrict_typeを指定する。

nullになる可能性がある場合は型の前に?をつけること

 

可変長引数

与えた引数を加算する関数として$a, $b, $cなどを引数にしても引数の数は合わせないとエラーにある。

そういう場合に引数に…とすると可変長にすることができる。

 

配列を返す関数(複数の戻り値)

 

 

 

 

配列

配列とは

・変数の中に別の変数をつくる仕組み。
・中の変数の1つ1つを要素という。3つあれば3つの要素。
・要素にはそれぞれ異なる名前のキーが必要。文字か整数。
・要素に代入されたデータを値という。
・キーが文字列の配列を連想配列という。キーが数字の配列を単に配列という。
・変数=配列。変数名=配列名となる。

配列の初期化

作り方① ひとつづつ順番に値を代入していく

注意

変数というのは代入されて初めて定義され型を持つ。

 

②ひとつづつキー名を指定して要素を作る

 

③カギカッコで代入

 

④array関数を使う方法(インデックス配列の場合)

 

⑤array関数を使う場合(連想配列の場合)

⑥explodeで分割して放り込む

カンマやスペースで文字列を分割するとき。
第一引数に区切り文字、第二引数に文字列。結果は配列に。

さらに追加したい場合は

とすればいい。

⑦文字列からstr_spritで流し込む

文字列から指定文字ごとに配列に流し込む方法

 

配列の中身をすべてわかりやすく表示する

print_rのほうが見やすいけど、var_dumpのほうが型も表示してくれる。

 

配列に配列の値を追加する

…をつける。つけなければ途中2次元配列になり、2つ目の要素が配列の20,15になる。

 

要素の削除

配列の要素数 count

空行あった場合の配列に入れる処理
改行コードを最初に取るとwhile文の判定で止まってしまう。

配列を使ったランダムくじびき

N数分、配列を準備する。(席数確保例)

配列の並び替え(昇順)sort

配列の並び替え(降順)rsort

配列の数値を合計する array_sum

配列の数値を乗算する array_product

配列の中身を全部掛け算する

 

配列の数値の平均を出す

特定の値が配列の中に含まれているか in_array

該当があれば戻り値は1が帰ってくるif(in_array())でも判定できる。

 

連想配列

値にアクセスするためのキーを数値のインデックスではなく文字や数字にすることができる。

連想配列を使用する場合は「=>」を使う。

カギカッコを使う

 

array関数を使う

 

入力値からアイテムをwhileで合計する

例えばpaizaなどでありそうな、ドラクエなので入手したアイテムを足し込んでいく系。

!issetを仕込んでおかないと足しこみはできないのでundefineになる

 

連想配列に追加

 

連想配列の書き換え

 

連想配列の削除

 

連想配列を値で並び替え(昇順) asort

 

連想配列を値で並び替え(降順) arsort

 

連想配列をキーで並び替え(昇順) ksort

 

連想配列をキーで並び替え(降順) krsort

 

複数行を連想配列に入れるやり方

 

 

二次元配列

2次元配列

出現回数をカウントする

 

二次元配列の値を取り出す

 

 

日付

date関数

例 2015年4月1日午後4時3分9秒なら

日付の計算

標準時間の設定

 

 

便利関数

ディレクトリ情報を取得 dirnama

Laravelのコントローラで動かした場合

 

 

その他

標準入力からの取得

コメント

タイトルとURLをコピーしました