目次(クリックでジャンプ)
とりあえずメモ
DateTimeクラス
日付の計算や比較に使用
sprintf関数(数字を「0埋め」)
$idNum=1;
echo sprintf(‘あなたのIDは%04dです’, $idNum); // あなたのIDは0001です
PHPの記述法
php全体の記述
「<?php」と「 ?>」で囲んだ部分がphpとみなされ、「<?php」と「?>」で囲めばhtmlの中にも混ぜて書くことができる。
例1(命令文を挿入)
青字がhtmlで桃字がPHPです。
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<title>~</title>
</head>
<body >
<h2>見出し</h2>
<p>段落文章</p>
<?php
phpの命令文;
?>
<p>段落文章</p>
<p>段落文章</p>
</body>
</html>
例2(命令文を分割して挿入)
長い記述の命令文(条件分岐・繰り返しなど)の一部ごとに「<?php」と「 ?>」で囲んで配置できる。青字がhtmlで橙・桃字がPHP。
<h2>見出し</h2>
<p>段落文章</p>
<?php
phpの命令文;
phpの命令文;
?>
<p>段落文章</p>
<?php
phpの命令文開始…
?>
<p>段落文章</p>
<p>段落文章</p>
<?php
…phpの命令文終了;
?>
<p>段落文章</p>
<p>段落文章</p>
例3(まとめて配置)
htmlの前にまとめて配置する例。青字がhtmlで桃字がPHP。
<?php
phpの命令文;
phpの命令文;
phpの命令文;
?>
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<title>~</title>
</head>
<body ><h2>見出し</h2>
<p>段落文章</p>
<p>段落文章</p>
<p>段落文章</p>
</body>
</html>
phpの命令文の記述
一つの命令の最後に「;」をつける。
エラーが出るのは、この「;」つけ忘れが一番多い!!
コメントの記述
一行コメントは「//」の後に続ける。
複数行コメントは「/*」と「*/」で挟む(CSSと同じ)
変数
通常の変数(ローカル変数)
定義した関数・クラスの中でだけ通用する。別の関数では同じ名前でも別の関数として扱われる。
書き方「$変数名=変数の値;」
$name=1;//変数「name」にを1を代入
$name=”Tanaka”;//文字の場合ダブルクォーテーションで囲む
変数の命名
1文字目はアルファベット(a~z)(A~Z)かアンダーバーで、2文字目以降は数字もOK(0~9)
ハイフン(-)はNG
変数の命名法
PHPの変数名には、基本的にローワーキャメル記法「$numUsers」)を使用。
cfアッパーキャメル記法「$NumUsers」
スネーク記法「$num_users」
使用例
$name=”Tanaka”;
print ($name);
結果:「Tanaka」と表示される
可変変数
変数名に変数を使ったもので、「$$変数名」か「${$変数名}」と記述する。後者の方が良いみたいだ
使用例
$value=10;
$name=”value”;
echo”${$name}”;//「10」と出力される
echo”$$name”;//「$value」と出力されてしまう!
変数のスコープ
スコープ
変数が生存できる範囲のこと
関数外で宣言された変数(グローバル変数)は関数外で生存できる(グローバルスコープ)が、
関数内で宣言された変数(ローカル変数)は関数内でしか生存できない(ローカルスコープ)
関数内での計算結果を使うには戻り値を使う。
特別な変数1:グローバル変数
全体(関数外)で共通に使用される変数
使用法
❶グローバル宣言をしておく(多い)
ある変数をグローバル変数として(関数内でも)使いたい場合は宣言をする
global $num;
$num = 10;
❷$globals[“連想名”]を使う(少ない)
予め決められたグローバル変数は、連想配列$globals[]からアクセスできる
例
定義済みグローバル変数
(例)
変数 概要
$GLOBALS …使用可能な変数の配列
$_SERVER …サーバーの環境情報の配列
(例1)$_SERVER[“SCRIPT_NAME”]~スクリプト自身のファイルネームを取得
$_GET …HTTPのGETメソッドで送信されたパラメータの配列
$_POST …HTTPのPOSTメソッドで送信されたパラメータの配列
$_COOKIE …ブラウザーから送信されたクッキー情報
$_FILES …HTTPのPOSTメソッドのファイル情報の配列
$_REQUEST …$_GET、$_POST、$_COOKIEをまとめた配列
$_SESSION …セッション情報の配列
$_ENV …環境変数の配列
$php_errormsg …PHPのエラーメッセージ
$HTTP_RAW_POST_DATA …HTTPのPOSTメソッドで送信されたデータ
$http_response_header …HTTPの応答ヘッダーの配列
$argc …引数の数
$argv …引数の配列
スーパーグローバル
ローカルスコープでもグローバルスコープでも参照できる算数
(例)$_POST//$_GET//$_SESSION など
特別な変数2:静的変数
関数内の変数は関数が呼び出されるたびに初期化されるのが通常だが、静的変数は初期化されずに値を保持する。
static $変数名;
例えば、関数の再帰的呼び出し(関数内で関数自身を呼び出す)に回数制限をする(無限ループを避ける)のに使われる
変数のデータ型
int(整数値)
float(小数値)
string(文字列)
bool(真偽)
真(true)か偽(false)の二値のどちらかをとる
array(配列)
複数の値(要素)を格納した変数(→後述)
文字列
2つの表現方法
ダブルクォーテーション
“文字列“
シングルクォーテーション
‘文字列‘
違い
「” “」は内部の変数が展開されるが、「’ ‘」は展開されない。
例)
$msg=”Hello”;
echo “$msg”;//「Hello」と出力される
echo ‘$msg’;//「$msg」と出力される
ダブルクォーテーションの注意
(PHP側で)変数部分を他の文字列と区別できるように{}で囲むのが良さげ。
(例)
$msg=”hello”;
echo “{$msg}♪”;//「hello♪」と出力される
echo “$msg♪”;//「『$msg♪』という変数がないよ!」とエラーになる。
気づき
htmlに混ぜてタグを出力するような場合は、シングルクォーテーションに入れないとエラーが出やすい!
文字列の連結
ドット(.)を使う
例
$msg=”Hello”.“World!”;
echo$msg;//「HelloWorld!」と表示される
類似技法(カンマ)
並べて表示するだけならカンマ(,)でも良い。コチラのほうが処理が早くなるらしい。
echo “Hello”,“World!”;//「HelloWorld!」と表示される
文字列に関連する関数
検索
preg_match(検索文字列,対象文字列)
対象文字列(配列はダメポ)の中に検索文字列があるか調べる。あればtrue,なければfalse
preg_match_all(検索文字列,対象文字列)
条件にあてはまる文字列を全て取得する
(例)$matches=preg_match_all(/<h2>(.*?)<\/h2>/,$contents)
$matches[0]には<h2></h2>も含めた文字列が順に格納され、$matches[1]には<h2></h2>を含まない文字列が順に格納される
その後、
if (isset($matches[1])) {
$index = array_merge($index, $matches[1]);
}
のように$matches[1]を利用する
文字数(長さ)を計測
strlen(文字列または$文字変数)
1バイト換算の?文字の長さを返す
(例)
echo strlen(“World”);//→5
echo strlen(“こんにちは”);//→15(3倍になる!)
mb_strlen(文字列または$文字変数)
日本語(2バイト文字)の文字の長さを返す
(例)
echo mb_strlen(“World”);//→5
echo mb_strlen(“こんにちは”);//→5
コツ
入力した文字のチェックの際に、strlenとmb_strlenで計測して値が変わらない場合は全部半角文字だと分かる。
また、ちょうど3倍になっている場合は全部全角文字と分かる。
改行コード
テキストデータを書き込む際に、改行させたい場合は”\r\n”を入れる
ヒアドキュメント
改行やダブルクォーテーション・htmlタグなどをまとめてそのまま表示させたい場合に使用する
記述例
$strings=<<<eot
文字列
文字列
文字列
eot;
文字列の改行などがそのまま$stringsの内容になる。
「<<<終端文字列」でヒアドキュメントの開始。終端文字列は何でも良い(ここではeotを使用)
最後のeotの前にスペースを入れるとエラーになる!
利用例
表示を条件で変化させたい場合に、htmlタグをヒアドキュメントにして代入する
改行がある文字列(配列など)を代入したい場合
「code snippet」での表示はこれを使わないと無理
ヒアドキュメントの中
ヒアドキュメントの中でも変数を展開できる。
htmlパートで使用するechoの短縮形<?=$変数?>は使う必要がなく、直接「$変数」で行ける。{$変数}にすると確実なようだ
配列に格納する
まとめて行う
セミコロンを入れないこと
$array=[
<<<eot
文字列
eot
,
<<<eot
文字列
eot
,
<<<eot
文字列
eot
];
自動キーでに収納させる
$array[]=
<<<eot
文字列1
eot;
$array[]=
<<<eot
文字列1
eot;
これを繰り返せば自動で[0]からキーがついていく
配列
意義
「配列」=配列変数=複数の値(要素)を格納した変数のことで、格納された各要素を識別するための値を「キー」と呼ぶ。
(例1:数字のキー)
$score[1]…複数の値を格納した配列変数「$score」のキー「1」の棚に入っている値
注意*数字のキーは「0」から始まる
(例2:文字列のキー)
$taro[“age“]…複数の値を格納した配列変数「$taro」のキー「”age“」の棚に入っている値
シングルクォーテーションで「$taro[‘age’]」としても良い。文字列の展開がない分、こちらの方が処理が少し早いらしい
PHPにおける配列
一般的には、キーとして整数を使うものを「配列」と呼び、文字列等を使うものは「連想配列」と区別するが、
PHPではまとめて「配列」と呼んでいる。
配列を宣言する
値を入れずに、後の操作に使う配列を予め宣言しておく
$配列名=[];//空の配列を宣言する
(例)$array=[];
配列に値を代入(格納)する
まとめて一気に格納する方法と、1つづつ格納する方法がある。
まとめて格納(初期設定に用いる)
その1(キーを指定してまとめて格納)
(例1:数字のキーの場合)
$array = [
1 => 100,
2 => 200,
3 => “Three Hundred”,
];
結果、配列変数「$array」の[1]に「100」、[2]に「200」、[3]に「Three Hundred」が格納される
(例2:文字列のキーの場合)
$array = [
“name” => “Taro”,
“height” => 170,
“weight” => 60,
];
配列変数「$array」の[“name”]に「Taro」、[“height”]に「170」、[“weight”]に「60」が格納される
その2(キー指定せずにまとめて格納)
(例)
$array=[
100,
200,
“Three Hundred”,//最後の要素のカンマは無くてもOK
];
改行せずともOK
$array=[100,200,”Three Hundred”];
これは以下と同じで
$array = [
0 => 100,
1 => 200,
2 => “Three Hundred”,
];
結果、配列変数「$array」の[0]に「100」、[1]に「200」、[2]に「Three Hundred」が格納される
一つづつ格納(後から追加・変更するのに使う)
その1(キー指定)
$配列名[キー] = 値;
(使用例)
$array[0]=123;//数字のキーに数値を格納
$shikakukei[“name”]=”ひし形”;//文字列のキーに文字列を格納
(注意)
すでに使用している配列では無い変数と同じ名前を使うとエラーになる。
$ans=5;
$ans[3]=4;
配列の名前を変えればOK
$ans=5;
$answer[3]=4;
その2(キー未指定)
$配列名[] = 値;//[0]から自動で後ろに追加されていく
まとめて同じ値で埋める(fill)
$配列名[] =array_fil(開始キー,要素の数,埋める値)
(使用例)
$array=array_fill(0,5,1);//$array[0]~[4]全てに「1」が格納される
配列を削除する
unset(配列(要素)名)
使用例1:配列全体を削除
unset($array);//配列$arrayを消去
使用例2:要素を削除
unset($array[2]);//$arrayのキー[2]に対応する要素を削除。キーは詰まらず歯抜けになる(ループ中の処理だとその方が便利なこともある。)ので、終了後にarray_valuesやarray_mergeで詰める。
array_splice()
置き換えの関数だが削除にも使える。キーが詰まるのがunsetと異なる。(後述)
配列から値を引き出す
配列名とキーを指定して値を引き出す
数字のキー
print($array[0]);//数字のキーを使用。配列変数「$array」のキー[0]に格納されている値を表示
文字列のキー
$height=$shikakukei[“takasa”];//文字列のキーはダブルクォーテーションに入れる。配列変数「$shikakukei」のキー[“takasa”]に格納されている値を別の変数「$height」に代入
変数のキー
$year=2019;
echo $hensachi[$year];//変数をキーとして使用。配列変数「$hensati」のキー[2019]に格納されている値を出力
複数の値を取り出す(展開)
array_slice(配列名,n,m);//配列のn+1番目(番号が0から始まる)からm個の要素を取り出す(削除はしない)。mを省略するとn番目から後の要素すべてを取り出す(削除はしない)。
例)
array_slice($ary,3,2);//配列$aryの前から3+1=4から2個つまり4番目・5番目の要素を取り出す(削除はしない)。
多次元配列
配列の中に、さらに配列を格納したもの
キーを指定して格納例
$seito=[//配列$seitoへの格納開始
“taro”=>[//配列要素$seito[“taro”]への格納開始
“sex”=>”m”
“height”=>170
],//$seito[“taro”]への格納終了
“hanako”=>[//配列要素$seito[“hanako”]への格納開始
“sex”=>”f”
“height”=>160
],//$seito[“hanako”]への格納終了
];//配列$seitoへの格納終了
上の配列「$seito」の内容
$seito[taro] | $seito[hanako] | |
[sex] | m | f |
[height] | 170 | 160 |
キー未指定の格納例
$array=[
[‘name’,’Taron’],
[‘gender’,’male’],
[‘age’,20],
];
結果
$array[0] | $array[1] | $array[2] | |
[0] | name | gender | age |
[1] | Taron | male | 20 |
注意
多次元配列の記述は「$変数[一次キー][二次キー]」になる。「$変数[一次キー[二次キー]]」ではない。
(例)$_POSTでフォームの中のnameが”example[“age”]”という値を引っ張ってくるとき
正:$_POST[“example”][“age”]
誤:$_POST[“example[“age”]”]
配列に関連する関数
要素を数える~count
count($配列名);
(使用例)
配列の要素の数だけ処理を繰り返す時に回数の上限として使用
(例1:$arrayの要素の数)
for($i=0;$i<count($array);$i++){
処理…;
}
//この例では$iの初期値が0なので、そのまま条件不等式の右辺にする。$arrayの要素が4つなら4回処理を繰り返して終了($i=0,1,2,3)
(例2:$arrayの要素の数)
for($i=1;$i<count($array)+1;$i++){
処理…;
}
//この例では$iの初期値が1なので、+1して不等式の右辺にする。$arrayの要素が4つなら4回処理を繰り返して終了($i=1,2,3,4)
多次元配列を数える場合
例えば一次要素2つ、それぞれに二次要素が3つの配列の場合
「count($配列名)」だと一次要素の数だけをカウントし「2」になる。
一方「count($配列名),1」のように引数を指定すると二次要素をあわせた個数をカウントし「8」になる。
端に要素を加える~unshiftとpush
array_unshift
array_unshift(配列名,追加要素1,追加要素2…);//配列の最初に付け加える
(例)
array_push
array_push(配列名,追加要素1,追加要素2…);//配列の末尾に付け加える
(例)
こちらの御記事が分かりやすい
要素を取り出す(展開)~slice
array_slice(配列名,n,m);//配列のn+1番目(番号が0から始まる)からm個の要素を取り出す(削除はしない)。mを省略するとn番目から後の要素すべてを取り出す(削除はしない)。
例)
array_slice($ary,2,3);//配列$aryの前から3・4・5番目の要素を取り出す(削除はしない)。
端の要素を取り出して削除~shiftとpop
array_shift
最初の要素を取り出して削除する。配列のキーが自動数値(0,1,2…)の場合は、キーが新たに振り直される(全体が1つ前にshiftする)。
(例)
array_shift($hairetsu);//配列「$hairetsu」最初の要素を取り出して削除
array_pop
配列末尾の要素を取り出して削除する。
array_pop($hairetsu);//配列末尾の要素を取り出して削除
複数の要素を削除・削除して置き換え~splice
array_splice(配列名,n,m,値または配列);
配列のn+1番目(番号が0から始まるので)からm個の要素を削除して、値または配列で置き換える
値または配列を省略すると単純に削除するだけで置き換えない。
mを省略するとn番目から後の要素すべてを削除
(例)
指定値を持つ要素を削除diff
array_diff(配列名,削除する要素を持つ配列)
(使用例)
$array=[“”,4,”,””,2];
$result=array_diff($array,array(“”));
//$resultは
[4,3]という配列になっている。
キーは歯抜けになっているので、array_valueかarray_mergeで歯抜けのキーを詰める
要素を連結する~implode
implode(“区切り文字”,$配列名);
cf:explode
反対に文字列を分割して配列にするのがexplode
要素を検索する~in_array
完全一致している要素があれば、「true」なければ「false」を返す
in_array(“検索語”,$配列名);
部分一致で検索して抜き出す~preg_grep
部分一致する要素をキーと一緒に抜き出す(歯抜けのキーになる)。
preg_grep(‘/語句/’,配列名)//検索語句はデリミタ(/など)で囲む
preg_grep(‘/語句1|語句2/’,配列名)//or検索語句はパイプで連ねる
preg_grep(‘/語句1|語句2/’,配列名,1)//最後に「1」で除外検索
注意
再帰的には使えないようだ
$array=preg_grep(‘/語句/’,$array);//はダメっぽい
この場合、
$arrayTmp=glob(*.*);
$array=preg_grep(‘/語句/’,$arrayTmp);
のように一時的な配列を間にはさんで行う
他の使い方
if(preg_grep(~,~))で使えば、配列内に文字列が一つでもあれば処理を発動するのに使える
歯抜けのキーを詰める~values
preg_grepやdiffなどで出来た歯抜けのキーを連番にする♪
array_values(キーを詰めたい配列名)
$array=array_merge($array);//歯抜けの配列$arrayのキーを連番にする♪
cf歯抜けのキーを詰める方法
array_valueとarray_merge
前者ではキーが破棄され後者はキーが維持されるのが異なる
キーなしの単独の配列のキーを詰める場合はarray_valueでもarray_mergeどちらでも結果に変わりはない。
配列の操作
要素の一括操作
配列の要素の並べかえ
array_reverse
順序を逆にする
$a=array_reverse($a);//配列$aの要素の順序を逆にする
多次元配列の並べかえ~multisort
単独の項目を基準に
使用例(この配列の一次要素を二番目の二次要素(数字)で並び替える)
$array=[
[‘0番目画像のパス’,’2′],
[‘1番目画像のパス’,’3′],
[‘2番目画像のパス’,’1′],
];
まず、並べ替えの基準になる配列($sort[])を作る
foreach($array as $value){
$sort[]=$value[1] ;//ソート用の配列$sortを作成
}
命令実行
array_multisort($sort,$array);//「ソート配列→並べ替える配列」の順に記述
結果
$array=[
[‘2番目画像のパス’,’1′],
[‘0番目画像のパス’,’2′],
[‘1番目画像のパス’,’3′],
];
複数の項目で並び替える
ソート用の配列をもう一つ作り、「ソート配列(主)→ソート配列(副)→並べ替える配列」の順に記述する
複数配列の結合~merge
複数の配列を結合して1つの大きな配列を作る
array_merge(配列1,配列2,…)
配列1,2…の要素を一次元の連続した配列にする。キーがある場合は保持され、キーがない場合は自動で連続するキーが当てられる。
例1:$result=array_merge($array1,$array2,…);//$array1,$array2…の要素を順番に並べた一次元配列$resultを作成
例2:$result=array_merge($result,$array1,$array2,…);//$result自身の要素に続けて$array1,$array2…の要素を順番に並べて$resultを更新
例3
多次元配列を一次元配列に直す
$results=[[a,b],[c,d,e]];
$last=array_merge(…$results);
これで$last=[a,b,c,d,e]になる
array_map
外部に関数をおく
内部に記述
これ便利だ。こちらの御サイト様より
(例)各要素をニ倍にする
$tmp = [1, 2, 3];
$ary = array_map(function($r){return $r*2;}, $tmp);
↓
$ary の要素は [2, 4, 6]になる
定数
変わらない値。一度定義すると違う値を代入できない。
慣習的に大文字で表す
定数の定義
define(“定数名”,値);
(例)
define(“XXX”,3);//定数XXXを3と定義
define(“YYY”,”Hello!”);//定数XXXを”Hello”と定義
検索・操作
glob関数(フォルダ内をファイル検索)
記入例
$array=glob(‘*.jpg’);//phpプログラム本体と同一フォルダ内でjpgファイルを探して、$arrayに収納する
特殊記号
「*」…0文字以上の任意の文字
「?」…任意の1文字
「\」…特殊文字エスケープ
「[]」…1文字のor検索
s[ow]t…sotかswt
s[!ow]t…sotかswt以外のsat,sbtなど
ファイルのみ検索
glob(‘*.*’);//同一フォルダのファイル(拡張子を持つ存在)のみを検索
ディレクトリのみ検索
glob(‘*’,GLOB_ONLYDIR);//同一フォルダ内のフォルダのみを検索
1文字以上のOR検索
検索語句群を「{}」内にカンマで区切って入れて、第2引数に「GLOB_BRACE」を指定する
(使用例1)
$array=glob(“{*.jpg,*.png}”,GLOB_BRACE);
//phpプログラム本体と同一フォルダ内でjpgファイルかpngファイルを探して、$arrayに収納する
(使用例2)
$array=glob(“folder/*.{jpg,png}”,GLOB_BRACE);
//phpプログラムがあるフォルダのサブフォルダ「folder」内のjpgかpng画像を検索して$array内に収納する
str_replace(文字を検索置き換え)
記入法
str_replace(‘検索文字列’,’置き換え文字列’,検索先の文字列);
(例)$arrayM=str_replace(‘o.jpg’,’.jpg’,$array);//$arrayの中を検索して「o.jpg」を「.jpg」に置き換えた結果を$arrayMに格納する
演算子
代数演算子
余りを求める→「%」
$a=17%3;//$a=2になる
累乗→「**」
$a=2^^3;//$a=8になる
変数型を整数や小数にする「+」
何や???
値を負にする→「-」
何や???
単項演算子
加算子(インクリメント)
変数名++~変数を+1する
例)
$x = 5;//変数xに5を代入
$x++;//変数xは+1されて、6になる
減算子(デクリメント)
変数名– …変数を-1する
複合演算子(代入演算子の発展)
加算
変数名 += n …変数にnを足す
例)
$z=3;
$z+=1;//$z=3+1=4になる
乗算
変数名 *= n …変数をn倍する
例)
$z=3;
$z*=2;//$z=3*2=6になる
文字列結合
文字変数a.=文字変数b
…文字変数aを文字変数bと結合させる
例)
$a=”google”;
$b=”くたばれ”;
$a.=$b;//$a=”googleくたばれ”になる
三項演算子
条件分岐を一行で表す(後述)
演算に関連する関数
概数
小数点以下切り捨て
floor(式または数値・変数) …数値を超えない最大の整数を返す
例1
$a=floor(3.14);//$a=3になる
例2
$b=floor(-3.14);//$a=-4になる
小数点以下切り上げ
ceil(式または数値・変数) …変数の次に大きい整数を返す
四捨五入
round(数値,丸めるケタ数、丸めのモード)
丸めるケタ数はプラスが小数点以下で、省略すると0(整数に丸める)になる。
モードは省略するとゼロから離れる方向に丸める
(例)
$a=(round(53.74));//整数に丸める(54になる)
$a=(round(53.74,1));//小数第一位に丸める(53.7になる)
$a=(round(53.74,2));//53.74のまま
$a=(round(53.74,-1));//十の位に丸める(50になる)
平方根
sqrt(数値・数式または変数) …平方根を出力(15ケタ?)
(例)
$x=sqrt(16);//$x=4になる
$x=sqrt(2);//$x=1.4142135623731になる
三角関数
角度指定はラジアンで行う
角度形式の変換
deg2rad(度数法の数値);//度数法をラジアンに直す
rad2geg(ラジアン法の数値);//ラジアンを度数に直す
種類
sin(ラジアン法の数値)
cos(〃)
tan(〃)
(例)
$angle=sin(deg2rad(90));//90°(をラジアンに直した1/2pi)のsin値(=1)を得る。
逆三角関数(角度を求める)
逆正接(アークタンジェント)
atan2(y座標,x座標)~原点と点(x,y)を結んだ線がx軸と作る角度をラジアンで得る。
(例)
$angle=rad2deg(atan2(10,10));//点(10,10)と原点を結んだ線がx軸と作る角度(ラジアン)を度数法に直す(45°になる)。
制御構文
条件に応じて処理を分岐させる
条件式
分岐の判断に用いる式
比較演算子
「==」~値が等しい
値が等しければ真
使用例:if($x==3) //もし$xが3ならば
「===」~型も等しい
型も含めて等しければ真
「!=」「<>」~等しくない
値が等しくなければ真
使用例
if(!$x==3) //もし$xが3でないならば
「<」「>」~
より小さい、より大きい
「<=」「=>」
より少ないか等しい、より多いか等しい
(矢印のようになっているな…)
論理演算子
「and」「&&」~かつ
使用例
if($x1==3 && $x2==5) //もし$x1が3かつ$x2が5ならば
「or」「||」~または
使用例
if($x1==3 || $x2==5) //もし$x1が3または$x2が5ならば
「!」~でない
真偽値
偽(false)になるケース
・文字列の場合→文字列が空か”0″
・数値の場合→0か0.0
・論理値の場合→false
・配列の場合→要素の数が0
(例)
$x=5;
if($x){
命令;
}
//「$x」がtrueになって命令が実行される
関数?
isset(変数)
~変数に値がセットされていれば真になる
例1)
if(isset($trigger)){
命令;
}
//変数$triggerに値がセットされていれば命令を実行する
例2)否定で使う例
if(!isset($trigger)){
命令;
}
//変数$triggerに値がセットされていなければ命令を実行する。三項演算子と組み合わせると便利
is_numeric(変数)
~変数が数字または数値形式の文字列(フォームからPOSTで得た数値等)なら真になる
is_int(変数)
~整数なら真になる
preg_match(変数)
~正規表現で判定
if構文
if&elseによる二分岐
if(条件文){
____実行命令1;
}else{
____実行命令2;
}
注意:慣例として実行される命令の前に空白。半角スペース4個が標準
三項演算子~条件分岐を一行で♪
$変数名=(条件)? x:y;
…条件を満たす場合は変数にxを、満たさない場合はyを代入する。
(例1)
もし$aの方が大きければ$maxに$aを代入、違ったら$bを代入
$max=($a>$b) ? $a:$b;
これは以下の条件分岐と同じ内容を一行で表している。
if($a>$b){
____$max=$a;
}else{
____$max=$b;
}
例2)頻出
POSTで送信されてきたフォームでvalXが入力されていたらその値を代入、入力されていなかったら30を代入(初期設定値の設定に使う)。
$valX=(isset($_POST[“valX”]))? $_POST[“valX”]:30;
例3)確率をコントロールしたランダムな値決定
$rand=mt_rand(0,100);
$d=1;
$d=(27<$rand)? 2:$d;
$d=(75<$rand)? 3:$d;
$d=(90<$rand)? 4:$d;
//dに1(27%),2(48%),3(15%),4(10%)いずれかの値をとらせる
三分岐(if&else入れ子)
三分岐をif&elseだけで表すと複雑になってしまう
if(条件文1){
____実行命令1;
}else{
____if(条件文2){
________実行命令2;
____}else{
________実行命令3;
____}
}
elseif文で三分岐(フラットな構造)
「if」と「else」の間に「elseif」をはさめば分岐が簡単。
if(条件文1){
____実行命令1;
}elseif(条件文2){
____実行命令2;
}else{
____実行命令3;
}
途中のelseifは何個でも増やせるのが便利
switch文
条件が「等しいとき(==)」だけのときはswitch文による分岐が使える
基本使用例
switch(比較対象の変数){
case 値1:
____実行命令1;
____break;
case 値2:
____実行命令2;
____break;
default ://上記のどの条件にもあてはまらない場合
____実行命令3;
____break;
}
break文は「}」の外に出るという命令で、これが無いと後ろにある他の条件の命令文が実行されてしまう。
範囲のような条件判断の例
switch(比較対象の変数){
case 値1:
case 値2:
case 値3:
____実行命令A;
____break;
case 値4:
case 値5:
case 値6:
____実行命令B;
____break;
default :
____実行命令C;
____break;
}
変数が1,2,3の場合はAが、4,5,6の場合はBが、それ以外の場合はCが実行される。
コロン構文
if/switch構文 において、「{」「}」の代わりに「:」「endif;」を用いることができる。(後述のループ構文while、for、foreachでも可能)
htmlとphpを混ぜて書く時に、構文の始めと終わりの対応が分かりやすくなる。
(例)
ループ処理
同様の処理を繰り返す。whileとforがある。
while構文
条件を満たす間、ずっと処理を繰り返す。繰り返しの「回数」でなく「条件」が決まっている場合に使うと便利なようだ。
最小の基本形
while(ループの条件){
実行命令;
}
$sum=0;
while($sum<30){ //条件設定
$rdm=mt_rand(1,15); //乱数生成
$sum+=$rdm; //複合演算子で加算
}
echo $sum; //最後に結果表示
(使用例)乱数を足していき30を超えたら停止
$sum=0;
while($sum<30){ //条件設定
$rdm=mt_rand(1,15); //乱数生成
$sum+=$rdm; //条件演算子で加算
}
echo $sum; //最後に結果表示
回数を決める形(for文と同じ機能)
カウンタ変数の初期設定;
while(ループの条件){
実行命令;
カウンタ変数の増加;
}
(使用例)
$i=1; //カウンタ変数の初期値を1に設定
while($i<=10){ //iが10以下の間実行
実行命令;
$i++; //&iを1増やす
}
ループを途中で離脱するbreak
カウンタ変数がループ終了の条件を満たさないうちに、ループから離脱させたい場合は「break;」を使う。
使用例:素数判定プログラム
$num = 15;//判定対象の整数
$i = 2;//カウンタ変数(割る数)
while($i < $num) { //ループ条件(カウンタが判定対象を超えない間)
____if ($num % $i == 0) { //条件:剰余がゼロ
____print($num.”は素数ではありません<br>”);
____break;//ループを抜ける
____}
$i++; //カウンタ変数を1増加
} //ループ終端。始端に戻る
print(“素数判定が終了しました。”);
ただの「break;」または「break1;」はそれを含むループの外に離脱する。
「break2;」は一つ外側のループの外に離脱する。
do…while
一回は処理を行った後に条件を満たしているか判断(満たしていない場合を条件にする)して繰り返す
基本形
do {
//処理
} while (条件);
使用例
処理の結果自体にもとづいて処理を繰り返すのに適している
do {
$ans=…//処理
} while ($ans == 0);//ansが0である限り繰り返し
do {
$input = getUserInput(); // ユーザーからの入力を取得する処理
} while (!isValidInput($input)); // 入力が条件を満たしているか確認する処理
for構文によるループ
繰り返しの「条件」ではなく「回数」が決まっている場合はfor構文を使うのが一般的なようだ
基本形
for(カウンタ初期設定;ループ条件;カウンタ増減){
____実行命令;
}
(使用例)
for($i=0;$i<10;$i++){ //ループ開始
echo “i={$i}<br>”; //「i=1」のような文字列を表示
} //ループ終端
上記例では$iが0,1,2…8,9までの10回処理が繰り返される
(2つの条件を入れ子にした使用例)
for($i=0;$i<5;$i++){ //外側のループ開始
for($j=0;$j<8;$j++){ //内側のループ開始
echo”{$i}-{$j}<br>”; //「1-2」のような文字列を表示して改行
} //内側のループ終端
} //外側のループ終端
上記例では外側のループが$i=0のとき、内側のループで$jが0,1,2…6,7までの8回処理が繰り返された後、外側のループが$j=1に進んで同じく内側のループが8回くりかえされ…$j=4までの合計8*5=40回処理が繰り返される
forループをbreakで抜ける
ループ内の処理中にif文でbreak;を書けば、条件成立時にループを抜けられる。
whileよりもコチラのほうが安心できるし、処理回数を数えられるし、良さげに見えるが…
(例:乱数を加えていき30を超えたら終了(最大10回))
$sum=0;
for($i=0;$i<10;$i++){ //最大10回のループ設定
$rdm=mt_rand(1,15);
$sum+=$rdm; //複合演算子で$sumに$rdmを加算
echo ‘sum=’,$sum,'<br>’;
____if($sum>30){
____break; //30を超えたらループから抜ける
____}
}
echo’処理は’,($i+1),’回で終了しました。<br>’;
foreach構文
配列の中身を抜き出すループ処理を行う
基本の形
foreach($配列名 as $ループ内での名){
____実行命令;
}
この基本形では値のみ抜き出される(一次配列の場合。多次元配列の場合、後述)。
(使用例)
$Data=[
“name”=>”taro”,
“age”=>12,
“height”=>165,
“weight”=>50,
];
foreach($Data as $value){
echo $value.'<br>’;
}
taro
12
165
50
と出力される。nameなどのキーは抜き出されない
キーも抜き出す形
foreach($配列名 as $ループ内でのキーの名=>$ループ内での値の名){
____実行命令;
}
(使用例)
$Data=[
“name”=>”taro”,
“age”=>12,
“height”=>165,
“weight”=>50,
];
foreach($Data as $key=>$value){
____echo”{$key}は{$value}<br>”;
}
//「nameはtaro」「ageeは12」…等と表示される
多次元配列の展開
単純にforeachをかけても値では無く配列が返されるので表示するには内側にもforeachループが必要。
(例)連想二次元配列
$info=[
‘Taro’=>[“age”=>16,”gender”=>”male”],
‘Hanako’=>[“age”=>15,”gender”=>”female”],
];
値のみ抜き出し
foreach($info as $value1){
foreach($value1 as $value2){
echo $value2.'<br>’;
}
}
外側のループで二次配列が配列$val1として順に返され、内側のループで配列$val1の中身を展開して文字列として返す。結果は「16」「male」「15」「female」と出力される
全部のキーを抜き出して階層的に出力
foreach($info as $key1=>$value1){
echo ‘<br>’.$key1.'<br>’;
foreach($value1 as $key2=>$value2){
echo $key2.’は’.$value2.’,’;
}
}
「taro」「ageは16,genderはmale,」「hanako」「ageは15,genderはfemale,」と出力される
一次配列のキーのみ出力
foreach($info as $key1=>$value1){
echo ‘<br>’.$key1.’,’;
foreach($value1 ad $value2){
echo $value2.’,’;
}
}
「taro,16,male,」「hanako,15,female,」と出力される
コロン構文
while、for、foreach においても、if同様に「{」「}」の代わりに「:」「endif;」を用いることができる
特にhtmlとphpを混ぜて書く時に、構文の始めと終わりの対応が分かりやすくなる。
(例)
フォームからのデータ受け取り
htmlによるフォーム
書式
入力部品を構成する<input>タグなどを<form>と</form>で囲んだ範囲がフォーム一式になる
(例)
<form …><input type=”text” …><input type=”submit” …></form>
制限
入れ子構造にはできないが、form構造の外側に部品を置くことは可能(inputタグのform属性を使用:後述)
(例)行き先がそれぞれ「A」「B」のフォームを入れ子にするつもりで、このように書いたとしても
<form (行き先A)>
…………
<form (行き先B)>
……b(Bに行かせたいボタンの記述)……
</form>
……a(Aに行かせたいボタンの記述)……
</form>
はじめに出てくるボタンbを押すとAに行ってしまう。
formタグの内容
典型的な例
<form action=”~.html” method=”post”>~</form>
action属性
フォームのボタンを押した時のリンク先を、「action=”送信先のURL”」で指定する
省略すると自身に飛ぶ
method属性
データの送信方法を「method=”get”」または「method=”post”」で指定
getは中身がアドレスバーで見えてしまうので、機密性がある情報はpostで送信する。
inputタグの内容
フォームを構成する各入力部品を作成する。主な属性はtype(部品の種類),name(送信する変数名),value(送信する変数値)など
inputタグは閉じタグがいらない。
type属性
<input type=”~” … >でフォームの部品の種類を指定する
type=”text”…一行のテキストボックス
type=”checkbox”…チェックボックス
type=”radio”…ラジオボタン(1つのみ選択できるボタン)
ボタン一つに対してinputタグを一つ配置。代入先の変数名をname属性、代入値をvalue属性で記述して、表示名はタグの外にむき出しで記述
<input type=”radio” name=”box-type” value=”N”>N-boxタイプ
type=”submit”…送信ボタン
type=”hidden”…画面上には表示せずにデータを送信
type=”range”…スライダー
type=”button”…汎用ボタン(JavaScriptと組み合わせて使用するらしい)
name属性とvalue属性
nameは変数名、valueは変数の値。
文字・数値を入力させる場合は<input type=”text” name=”valX”>のようにnameだけ指定すればOK。valueを指定すると最初から文字・数値が入力された状態になる
チェックボックスやラジオボタンの場合は部品ごとに<input type=”checkbox” name=”season” value=”summer” >のようにnameをvalueを書く。
入力に関係なく数値を送る場合は<input type=”hidden” name=”click” value=”on”>のようにvalueを指定
type=”submit”の場合はvalueは送信ボタンに表示される文字を指定する。
PHP側では「$_POST[“変数名”]」として変数値を受け取る(連想配列キーをダブルクォーテーションで囲む)。
nameに配列を指定
キーを指定する場合(配列$Datの[“ag”]キーに格納させたい場合)
<input … name=”Dat[ag]” … >
html側では連想配列キーをダブルクォーテーションで囲まない
キーを指定しない場合は自動で([0],[1]…)割り当てられる
<input … name=”Data[]” … >
size属性
<input … size=”~” … >で表示文字数を指定する(1以上の整数)
placeholder属性
placeholder=”テキスト”で薄いグレーのテキストを表示する
checked属性
<input … checked>で部品が最初からチェックされた状態になる。
disabled属性
<input … disabled>で部品がグレーの選択できない状態になる。
form属性
部品が所属するform要素を指定できる(え!そうなの…)
所属先のフォームにIDを設定して、部品のinputタグに属性を設定する。
(使用例)
<form id=”sample1″ action=”リンク先”>…/form</input>
……
<input type=”submit” form=”sample1″ value=”送信”>
この送信ボタンは<form id=”sample1″>の外にあるがそのactionで指定されたリンクへと飛ぶ。
input以外のタグ
textareaタグ
複数行のテキストエリアを作る。横幅文字数を「cols」で、行数を「rows」で指定。
閉じタグが必要
<textarea></textarea>。
タグの間にテキストを入れるとプレースホルダーのように表示される。
buttonタグ
新たに登場した送信ボタンとしても使用可能な便利なタグ。閉じタグとの間に文面を入れる
type=”submit”で送信ボタンにできる。変数(nameとvalue)を仕込むことも出来るので、同一フォームに対する複数の送信ボタンをならべることも可能♪
(使用例)
<button type=”submit” name=”reply” value=”no”>断る!</button>
//で$GET_POST[“reply”]に”no”が格納される
php側の受け取り
フォームの送信先(<form action=”ココ”>)で記述する
変数名=$_POST[“フォーム側のname”];
「POST」は大文字。php側では連想配列のキーはダブルクォーテーションで囲む。
(使用例)1種類の変数を受け取る場合
フォーム側の記述が<…name=”age”…>の場合
php側は
$var=$_POST[“age”];//変数$varにageの値を代入
(使用例)連想配列(キー指定)を受け取る場合
htmlフォーム側の記述が<…name=”Data[nenrei]”…>の場合(html側では[“nenrei”]でなく[nenrei])
php側は配列全体受け取り→配列から取り出し、と二段階で受け取る
$Data=$_POST[“Data”]; //変数$Dataに配列Dataの値を代入($Dataは配列になり$Date[nenrei]にフォームのnenreiの値が代入される)
$age=$Data[“nenrei”];//配列$Dataから$Data[“age”]を取り出して変数$ageに代入
関数
関数の意義
関数=処理をひとまとめにして、再利用できるようにしたもの。
引数(Parameters)=関数が処理を完結させるために必要なデータ
戻り値=関数が処理した結果
関数の命名法
構文(関数定義)
通常(戻り値がある場合)
function 関数名(引数の型 引数,引数の型 引数,…):戻り値の型
{
処理;
return 戻り値;
}
波カッコは開始行ではなく改行して始めるのが慣例
戻り値と引数の型
省略可(みたい…)
「array」…配列
「float」…小数
「int」…整数
「string」…文字列
「callable」
「bool」
戻り値がない場合
function 関数名(){
処理;
}
//戻り値の型を書くとエラーが出る
引数にデフォルト値を指定
関数呼び出しの時に引数を省略するとエラーが出るのを避けるために、引数にデフォルト値を指定できる。
function 関数名(引数 =デフォルト値,引数,…)
{
処理;
return 戻り値;
}
使用例
可変長引数
引数の個数を自由にする(引数をいくつでも渡すことができる)。引数は配列になる
function 関数名(引数の型 …引数)
{
処理;
return 戻り値;
}
引数配列の要素の個数に応じた処理をcount関数で繰り返し回数を決めたforループで行うようだ
使用例()
配列を引数に展開する
引数として3ドッツに続いて配列を書くと、配列要素を引数に展開してくれる。
(例)3つの引数を必要とする関数の場合
$配列=[1,2,3];
関数名(…$配列);//1を第一引数、2を第二引数、3を第三引数に展開する
ファイル内部の関数呼び出し
標準の呼び出し方
$変数=関数名(引数);
引数を関数に代入して呼び出し、戻り値を得て使用する
特別な呼び出し方
戻り値を必要とせず、処理を実行させるだけの場合
関数名(引数);
引数がない場合でもカッコだけはつける
関数名();
外部ファイルの関数呼び出し
戻り値を$変数として得る場合
require_once(“関数を含むファイル名.拡張子”);
$変数=関数名(引数);
処理を表示させる場合
require_once(“関数を含むファイル名.拡張子”);
関数名(引数);
関数名();//引数がない場合もカッコは必要
可変関数
関数名を表す変数の後ろに「()」を付けると関数として扱うことができる。
$変数=$関数名を表す変数(引数、引数…)
関数名の配列を用意してforeachで展開して次々に処理するのに使う
使用例(3つの関数を連続処理)
function func1(引数,引数…)
{
戻り値;
}
function func2(引数,引数…)
{
戻り値;
}
function func3(引数,引数…)
{
戻り値;
}
$funcNameList=[func1,func2,func3];
foreach($funcNameList as $funcName){
____$result=$funcName(引数,引数…);
}
コールバック関数
引数として変数としての関数を指定したもの
function 関数名(…, callable $func)
~変数$funcとして他の関数を引数にしている
(使用例)
array_map関数~第一引数にコールバック関数を渡して、他の配列要素にその関数を適用する
クロージャ(無名関数)
引数の中で定義を直接記述された関数のこと(無名関数)
使用例
無名関数の変数化(イミフ)
関数内の結果利用の注意
関数内で宣言した変数「ローカル変数」は関数外では利用できない(未定義関数としてエラーになる)ので、関数内の結果を利用する場合は戻り値を利用する。
逆に、関数外で宣言した変数「グローバル変数」も関数内では利用できない(globalで呼び込めるが推奨されない)ので、関数外の変数を関数内で利用するには引数を利用する。
セッション
$_POSTと同じようなスーパーグローバル変数の一つ。ブラウザ側でなくコンピュータのサーバー側に一時的にデータを保存する仕組み。
ブラウザをリロードしても消えずに残る。
開始と終了
開始
session_start();
終了
session_destroy();//セッションそのものの破棄
変数の設定と削除
変数の設定
変数は「$_SESSION」の連想配列の値として設定
$_SESSION[‘変数名’]=値;//変数名に$はいらない
$_SESSION[‘配列名’][キー]=値;配列の場合
削除
session_unset();//全てのセッション変数を消去。destroyと違ってセッションそのものは継続している
$_SESSION=array();も同じ効果?
実際には
$_SESSION=array();
session_destroy();
と二連発で初期化されているようだ…
unset($_SESSION[‘変数名’]);//変数を削除
unset($_SESSION);//全ての変数を削除。使用しないことを推奨されている。
ファイルの読み込み・加工
ファイルの読み込み
file文
ファイルの行ごとに区切って配列に入れてくれる
(使用例)
$line=file(tst.csv);//「tst.esv」の中身を行ごとに区切って配列$lineに格納する。
空白行も一つの要素として読み込んでくれるが、読み込んだ内容に「行末文字」が付いてきてしまう関係で?空白として認識できなかった。
ファイル名の後に「,FILE_IGNORE_NEW_LINES」をつけると「行末文字」が無くなり、空白として認識できた(カタマリの認識として使えそうだ)
file_get_contents
ファイルを全文丸ごと得る
(使用例)
$content=file_get_contents(‘例文.txt’);//同じフォルダの「例文.txt」の内容を改行コードなども含めて$contentの内容として取得する
explode
カンマなど(delimiter)で区切られた文字列を配列に分割する。
(使用例)
$str=explode(“,”,$file);//$fileの文字列を「,(カンマ)」で分割して配列$strの要素にする。
ファイルを作成
file_put_contents
ファイル名(パス)と内容(文字・数字)を指定して、ファイルを一発で作成
(使用例)
file_put_contents(‘tst20210913.txt’,’こにんちは’);//「こにんちは」を内容とする「tst20210913.txt」というテキストファイルを作成する
ファイル名とパス名は変数でも良い。内容は一次元の配列でも良い(連結される)
(使用例)
$name=’tst0920.txt’;
$content1=file_get_contents(‘文1.txt’);
$content1=file_get_contents(‘文2.txt’);
$array=[$content1,”\r\n”,$content2];
file_put_contents($name,$array);
//「文1.txt」と「文2.txt」の内容を連結した「tst0920.txt」が作成される。改行コードを挟んだので連結部分で改行される
その他
10進法16進法変換の関数
10進→16進
dechex(数字);
16進→10進
hexdec(数字);
出力:echo ;
基本文法
❶printと違って丸カッコがいらない(関数ではなく文)
echo’文字列<br>’;//「文字列」と出力して改行
$xxx =123;
echo $xxx;//「123」と出力
❷printと違って「,」を使った連結出力ができるecho’文’,’字’,’列’,'<br>’;//「文字列」と出力して改行
$xxx=123;
echo ‘$xxxは’,$xxx,’デス。<br>’;//「$xxxは123デス。」と表示して改行
●式の結果を出力する時は丸カッコに入れるようだ
echo(1+2+3),'<br>’;//「6」と表示して改行
省略形
<?=’Hello’?>//<?php echo’Hello’; ?>と同じ結果
出力:print()とprintf()
print(“文字列”);//「文字列」と出力
print($xxx);//変数$xxxの中身を表示
$xxx =123;
print(“xxxの内容は{$xxx}です”);//「xxxの内容は123です」と出力({}は無くても良い)
printf()
書式を指定して表示
(例)
$x=5.6;
$s1=”hello”;
4s2=”ねこ”;
printf(“%s – %s – %.3f”,$s2,$s2,$x);//文字列(string)、文字列(string)、小数(float)
乱数
乱数発生
rand(最小値,最大値)
mt_rand(最小値,最大値)
(使用例)
$rand=rand(1 , 10);//変数「$seed」1から10までの乱数を代入する
mt_randは高品質バージョン
シードを決めた乱数
srand(シード値)
mt_srand(シード値)
でシードをセット(リセット)してからrandやmt_randを使うと同じ結果が再現される
使用例
$seed=mt_rand(0,99999);//シードを乱数で決める
mt_srand($seed);//乱数発生シードに指定
$rnd1=mt_rand(1,10);//乱数発生
echo “乱数値={$rnd1}(seed:{$seed})”;//乱数とシードを表示
シードをメモしておいて固定すれば結果も固定される
変数の内容表示:var_dump(変数名);
(使用例)
var_dump($xxx);//変数「$xxx」の内容を表示する
配列を表示する場合、前後をprint(“<pre>”);とprint(“</pre>”);で囲むと改行などもそのまま表示してくれる。
(使用例)
print(“<pre>”);
var_dump($xxx);
print(“</pre>”);
(echoを使った例)
echo'<pre>’;
var_dump($xxx);
echo'</pre><br>’;
include(),require()
他のファイルを読み込んで実行する
require(‘./header.php’);
include(‘./header.php’);//同じフォルダにある「header.php」の処理がまるっと入る
違い
ファイルの読み込みに失敗した場合、requireは処理が中断されるがincludeは中断されない。
once付き
require_once()とinclude_once()は他のファイルを一回だけ読み込む。
使い分け
重要でないファイル→include();
重要なファイル(関数など)→require_once();