Programming note」カテゴリーアーカイブ

Paiza演習問題:カンマ区切りで 10 個出力 2 (paizaランク D 相当)

カンマ区切りで 10 個出力 2 (paizaランク D 相当)

10 個の数値が半角スペース区切りで与えられます。これらの数値をカンマ区切りで出力してください。ただし、末尾にはカンマではなく改行を出力してください。

入力される値
N1 N2 N3 ... N10

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を出力してください。

N1,N2,N3,...,N10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* 入力される数値はすべて 0 以上 1,000 以下

入力例1
0 1 2 3 4 5 6 7 8 9
出力例1
0,1,2,3,4,5,6,7,8,9
入力例2
462 218 867 547 11 630 845 689 891 630
出力例2
462,218,867,547,11,630,845,689,891,630

解答implode(",", $変数名)dを使えばかんたんだよ

<?php
  //半角スペース刻みの入力値を配列に格納
  $ary = explode(" ", fgets(STDIN));
  //カンマを足して出力
  echo implode(",", $ary);
?>

Paizaレベルアップ問題集(占い (paizaランク C 相当))

占い (paizaランク C 相当)

次のような占いプログラムを作成してください。

「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。

それぞれのユーザーに対応する占い結果を表示してください。

入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。

入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。

入力される値
入力は以下のフォーマットで与えられます。

n
(ユーザー_1) (ユーザー_1の血液型)
(ユーザー_2) (ユーザー_2の血液型)
(ユーザー_3) (ユーザー_3の血液型)

(ユーザー_i) (ユーザー_iの血液型)

(ユーザー_n) (ユーザー_nの血液型)
m
(血液型_1) (血液型_1の占い結果)
(血液型_2) (血液型_2の占い結果)
(血液型_3) (血液型_3の占い結果)

(血液型_j) (血液型_jの占い結果)
..
(血液型_m) (血液型_mの占い結果)

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
1から n までの各ユーザーについて順に、ユーザーとその占い結果を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦100
・1 ≦ m ≦100
・(ユーザー_i)は、半角英数字からなる1から20文字までの文字列
・(血液型_j)は、半角英数字からなる1から20文字までの文字列
・(血液型_jの占い結果)は、半角英数字からなる1から20文字までの文字列
・(ユーザー_iの血液型)と等しい、(血液型_j)が必ず存在
・i ≠kのとき、(ユーザー_i)と(ユーザー_k)は異なる文字列
・j ≠kのとき、(血液型_j)と(血液型_k)は異なる文字列

入力例1
5
Kyoko B
Rio O
Tsubame AB
KurodaSensei A
NekoSensei A
4
A red
B green
O blue
AB yellow
出力例1
Kyoko green
Rio blue
Tsubame yellow
KurodaSensei red
NekoSensei red
入力例2
5
Kyoko shishiza
Rio futagoza
Tsubame otomeza
KurodaSensei yagiza
NekoSensei mizugameza
5
shishiza the_first_person
yagiza the_second_person
otomeza the_first_cat
mizugameza the_first_dog
futagoza NekoSensei
出力例2
Kyoko the_first_person
Rio NekoSensei
Tsubame the_first_cat
KurodaSensei the_second_person
NekoSensei the_first_dog
入力例3
3
AAA aaa111
BBB bbb222
CCC ccc333
5
aaa111 zzz
bbb222 yyy
ccc333 xxx
ddd444 www
eee555 vvv
出力例3
AAA zzz
BBB yyy
CCC xxx

 

解答(入力例1で解説)

<?php
//入力値(数値)を受け取る
$n = trim(fgets(STDIN));
//空の配列で初期化する
$userToBlood = [];

//マッピング情報を配列$userToBloodに格納します。※1
for ($i = 0; $i < $n; $i++) {
[$user, $blood_type] = explode(' ', trim(fgets(STDIN)));
//$userToBlood[$user]$blood_typeを代入する
$userToBlood[$user] = $blood_type;
}

//入力値(数値)を受け取る
$m = trim(fgets(STDIN));
//空の配列で初期化する
$bloodToFortune = [];

for ($i = 0; $i < $m; $i++) {
[$blood_type, $fortune] = explode(' ', trim(fgets(STDIN)));
//マッピング情報を配列$bloodToFortuneに格納します。※2
$bloodToFortune[$blood] = $fortune;
}

foreach ($userToBlood as $user => $blood) {
//取り出したユーザー名と血液型から、
//血液型に対応する運勢を$bloodToFortune配列から検索し
//ユーザー名と運勢をスペース区切りで表示します。※3
echo $user . ' ' . $bloodToFortune[$blood] . "\n";
}

for文でそれぞれ連想配列を作成しています

※1の部分var_export($userToBlood[$user]);

array (
'Kyoko' => 'B',
'Rio' => 'O',
'Tsubame' => 'AB',
'KurodaSensei' => 'A',
'NekoSensei' => 'A',
)

※2の部分var_export($bloodToFortune[$blood]);

array (
'A' => 'red',
'B' => 'green',
'O' => 'blue',
'AB' => 'yellow',
)

※3の部分
foreachで$userToBloodのキーの部分の名前(kyoko,rio,tubame)と$bloodToFortune[$blood]の運勢(red,green,blue,yellow)を出力しています

Laravelのデバッグの仕方(dd編・log)

app/Http/Controlles/TestControllers.phpに以下の記述をして保存します
<?php
namespaceApp\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Test;
classTestControllerextendsController
{

  publicfunctionindex()
  {
    $values = Test::all();
    dd($values);
    returnview('tests.test');
}
}

サーバーを起動してhttp://127.0.0.1:8000/tests/testにアクセスします

php artisan server

このような表示になっていれば成功しています

ログを見る方法

storage/logs/laravel.logを見る

laravel.logの見方

上から履歴が記録されているので一番下が最新のログです。

今9478まで履歴があり、問題が出ているURLでアクセス(http://127.0.0.1:8000/tests/test)にアクセスすると…

このようにログが表示されます。

9478行目のlocal.ERROR: syntax error, unexpected token "&"
{"view":{"view":"/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php","data":
{"errors":"<pre class=sf-dump id=sf-dump-239852308 data-indent-pad=\" 
\"><span class=sf-dump-note>Illuminate\\Support\\ViewErrorBag</span> 
{<a class=sf-dump-ref>#321</a><samp data-depth=1 class=sf-dump-expanded>
local.ERROR: syntax error, unexpected token "&"

/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php

に予期しない&が含まれていることがわかったので

/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php

のファイルを見ます。

resources/views/tests/test.blade.php

test
@foreach($values as $value)
  {{$value->id}}<br>
  {{&value->text}}<br>
@endforeach

4行目が”$value”ではなく”&value”となっていたので、エラーになっていました。

$valueに変更したところ

から無事表示させることができました!

use Illuminate\Support\Facades\DB;と$tests = DB::table(‘tests’)->get();とする方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Test;
use Illuminate\Support\Facades\DB;

class TestController extends Controller
{
//
public function index()
{
  $values = Test::all();
// こちらのほうが必要なデータがわかって良い感じ
  $tests = DB::table('tests')->get();
  dd($tests);
  return view('tests.test',compact('values'));
 }
}

↓のように表示される

他にも↓のようなやり方でもOK
<?php
namespaceApp\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Test;
use Illuminate\Support\Facades\DB;

classTestControllerextendsController
{

publicfunctionindex()
{
  $values = Test::all();
// こちらのほうが必要なデータがわかって良い感じ
  $tests = DB::table('tests')
   ->select('id')
   ->get();
   dd($tests);
   returnview('tests.test',compact('values'));
 }
}

 

“zsh: permission denied: composer”と”sudo: composer: command not found”を解決できた方法(エラー対処録)

“zsh: permission denied: composer”と”sudo: composer: command not found”で少しハマった話

経緯

composerをインストールをして、Laravel環境構築でLaravelをインストールする際にcomposerコマンドをしても上記のエラーで先に進めなかった

解決法(いきなり結論)

“zsh: permission denied: composer”

sudoをつけてコマンドするだけ(パスワード入力する必要アリ)

Before

composer --version
↓エラー文
zsh: permission denied: composer

After

sudo composer install
↓エラー文
sudo: composer: command not found

sudo: composer: command not found

自分の解決策

Macintosh HDに移動してShift+⌘(コマンド)+.(ドット)で隠しファイルを見つける

/usr/local/binまで移動する

usrをクリック

 

localをクリック

binをクリック

↑cdコマンドでもGUIでやってもどっちでもOK

composerという名前のフォルダを削除する

rmコマンドで消すか、マウス操作で右クリックから削除

composerをインストールし直す

sudo curl -sS https://getcomposer.org/installer | php

以下のメッセージが出て

All settings correct for using Composer

Downloading...

Composer (version 2.5.1) successfully installed to: /Users/****/composer.phar

Use it: php composer.phar
sudo mv composer.phar /usr/local/bin/composer
composer --version

↓のような表示になってればOKです!

Composer version 2.5.1 2022-12-22 15:33:54
which composer

↓のような表示になってればOKです!

/usr/local/bin/composer

そもそもの原因はcomposer移動時にフォルダが作成されていてその中にcomposer.pharがあったので、パスが通ってなかったのだと思われます。

phpのエラー表示をしたいときやデバッグ方法

phpinfoを使う方法

phpファイル(ファイル名ini.php)に以下のように記述して保存します。
<?php
ini_set('display_errors', "On");
// $aieuo = 'aiueo';
echo $aiueo;
phpinfo();
?>

ブラウザで確認する(http://127.0.0.1/php_test/ini.php)

上のようにNotice:の表示が出ていたら成功です。

var_dumpを使う方法

phpファイル(var_dump)を作成して以下のように記述して保存します

<?php
ini_set('display_errors', "On");
$aiueo = 'aiueo';
// $kakikukeko = 'kakikukeko';
echo $aiueo;
echo '<br>';
var_dump($aiueo);
exit;
?>

ブラウザで確認して(http://127.0.0.1/php_test/var_dump.php)
以下のように表示されていたらOKです。

aiueo string(5) "aiueo" 

PaizaPHP演習問題2 (行の入力)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

1 行の入力 (paizaランク D 相当)

文字列 s が 1 行で与えられるので s をそのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s が 1 行で与えられます。

s

入力値最終行の末尾に改行が1つ入ります。

期待する出力
入力された文字列をそのまま出力してください。また、出力の末尾には改行を入れてください。

s
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza
出力例1
paiza
入力例2
Paiza21
出力例2
Paiza21
入力例3
paiza813
出力例3
paiza813

解答

<?php
$input_line = fgets(STDIN);
echo "$input_line";
?>

2 行の入力 (paizaランク D 相当)

文字列 s と t が 2 行で与えられるので、s と t の 2 行をそのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s と t が 2 行で与えられます。

s
t
期待する出力
入力された文字列をそのまま出力してください。また、出力の末尾には改行を入れてください。
s
t
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s, t ともに数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza
gino
出力例1
paiza
gino
入力例2
heisei31
reiwa1
出力例2
heisei31
reiwa1
入力例3
2012021300
2020042218
出力例3
2012021300
2020042218

解答

<?php
while ($input = trim(fgets(STDIN))) {
 $input_array[] = $input;
}
foreach ($input_array as $item) {
 echo $item . "\n";
}
?>

行入力】1,000 行の入力 (paizaランク D 相当)

s_1, s_2, s_3, … s_999, s_1000 の 1,000 個の文字列が与えられます。
文字列を与えられた順番通りに出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s_1, s_2, s_3, … s_999, s_1000 が 1000 行で与えられます。

s_1
s_2
s_3
...
s_999
s_1000

入力値最終行の末尾に改行が1つ入ります。

期待する出力
文字列を与えられた順番通りに出力してください。また、出力の末尾には改行を入れてください。

s_1
s_2
s_3
...
s_999
s_1000
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s_1 から s_1000 は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza0
paiza1
paiza2
paiza3
paiza4
paiza5~中略~
paiza994
paiza995
paiza996
paiza997
paiza998
paiza999
出力例1
paiza0
paiza1
paiza2
paiza3
paiza4
paiza5
~中略~
paiza995
paiza996
paiza997
paiza998
paiza999

解答

<?php
while ($input = trim(fgets(STDIN))) {
 $input_array[] = $input;
}
foreach ($input_array as $item) {
 echo $item . "\n";
}
?>

PaizaPHP演習問題1 (行の出力)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

 行の出力 (paizaランク D 相当)

1 行で整数 813 を出力してください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。

期待する出力
整数 813 を出力してください。また、出力の末尾には改行を入れてください。

813
条件
なし
解答

<?php
echo "813";
?>

2 行の出力 (paizaランク D 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

整数 8 と 13 をこの順番で出力してください。
また、整数 8 を出力した後と 13 を出力した後に改行をしてください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。

期待する出力
答えの数値を 2 行で出力してください。また、出力の末尾には改行を入れてください。

8
13

条件

解答

<?php
echo "8\n13";
?>

【改行あり出力】1,000 行の出力 (paizaランク D 相当)

1 以上 1,000 以下の整数を昇順で、すべて改行区切りで出力してください。

入力される値
ありません。
期待する出力
答えの数値を 1,000 行で出力してください。また、出力の末尾には改行を入れてください。
条件
解答
<?php
 for ($i = 1; $i <= 1000; $i++) {
 echo $i . "\n";
}
?>

Permission denyを解決した話(エラー対処録:scpコマンドの失敗)

経緯

プラグインのHighlighting Code Blockのprism.cssとprism.jsをローカルからさくらのVPSにscpコマンドで送ろうとしたら・・・

ユーザー名@IPアドレス: Permission denied (publickey).
lost connection

前提

ポートは22ではなく55555のみ開けています(あくまでも例)

ユーザー名1はMacのユーザー名

ユーザー名2はさくらのVPSで作成したユーザー名

IPアドレスはブログのIPアドレス

やったコマンド

scp -P 55555 -i ~/.ssh/id_rsa /Users/ユーザー名1/Downloads/prism.css ユーザー名2@IPアドレス:/var/www/wordpress/wp-content/themes/twentytwenty

普通に55555ポートに公開鍵認証でログインできているのに送れないのはおかしい・・・

解決できた方法

送り先の権限を変更する(chmod)

さくらのVPSにログイン

scp -P 55555 -i ~/.ssh/id_rsa ユーザー名@IPアドレス

送りたいディレクトリまで移動する

cd /var/www/wordpress/wp-content/themes/

権限を変更する

sudo chmod 707 twentytwenty

scpコマンドで送る

scp -P 55555 -i ~/.ssh/id_rsa /Users/ユーザー名1/Downloads/prism.css ユーザー名2@IPアドレス:/var/www/wordpress/wp-content/themes/twentytwenty

↓のような実行文があればscpコマンドが成功しています。

100% 569KB 3.4MB/s 00:00

※注意
適切な権限に戻すことを忘れないように!

 

PHPプログラミングノート7(組み込み関数3)

組み込み関数についてまとめる

ファイル操作(取得・保存・ベースネーム・ディレクトリパスを返す・絶対パスを返す)

file_get_contents() 

ファイルの内容をすべて取得する。また、URLを指定してウェブサイトのソースを取得することもできる。 

file_put_contents() 

文字列をファイルとして保存する。 

basename() 

ファイルやディレクトリのパスから最後にある名前の部分を返す。 

dirname() 

ファイルパスからディレクトリパスを取り出して返す。

dirname(__FILE__) とすることで実行中のPHPファイルのあるディレクトリを得ることもできる。 
これは「__DIR__」と同義。 

realpath() パスの「/./」や「/../」「/」などの参照を全て解決して正規化した絶対パスを返す。

ファイル操作(ファイルが存在しているか?・F、URLオープン・ファイルロック・1行取得・スプリットして取得)

file_exists() 

指定されたファイルパスにファイルが存在するかを調べて返す。 

fopen() 

ファイルやURLをオープンしてストリームに結びつける。 

flock()

fopen()によってオープンされたファイルのロック・開放を行う。 

fgets() 

ファイルポインタから一行取得する。 

fgetcsv() 

ファイルポインタから一行取得し、指定された文字をもとに区切られた配列を返す。

ファイル関連(fopen() によってオープンされたファイルを書き込み・クローズ・ファイルポインタの位置を先頭に戻す。内容を指定した長さに丸める)

fwrite() 

fopen() によってオープンされたファイルストリームに書き込む。

fclose() 

fopen() によってオープンされたファイルポインタをクローズする。 

rewind() 

ファイルポインタの位置を先頭に戻す。 

ftruncate() 

fopen() によってオープンされたファイルの内容を指定した長さに丸める。 
サイズに 0 を指定することでファイルを空にできる。

ファイル関連(ポインタが終端にいるかどうか?・HTTP POSTでアップロードされたかどうか・←真の時指定されたファイル名に移動する)

feof() 

ファイルポインタが終端に達しているかを調べて返す。 

is_uploaded_file() 

ファイルが HTTP POST によりアップロードされたファイルであるかを調べて返す。 
不正操作を防ぐために用いられる。

move_uploaded_file() 

ファイルが HTTP POST によりアップロードされたファイルである場合、指定されたファイル名に移動する。

ファイル関連(mkdir・ファイル削除・リネームや移動・コピー・ファイルかどうか?・ディレクトリかどうか?・chmod・chown)Linuxと同じコマンドあり

mkdir() 

ディレクトリを作る。パーミッションを設定したり入れ子構造のディレクトリを作ることもできる。 

unlink() 

ファイルを削除する。 

rmdir() 

ディレクトリを削除する。

rename() 

ファイル名を変える。ファイルを移動する。 

copy() 

ファイルをコピーする。 

is_file() 

指定されたパスがファイルを指しているかを調べて返す。 

is_dir() 

指定されたパスがディレクトリを指しているかを調べて返す。 

chmod() 

ファイルのパーミッションを変更する。 

chown() 

ファイルのオーナーを変更する。

ネットワーク(特殊文字をエスケープ・生HTTPヘッダーを出力・改行タグ変換・HTML タグを取り除く・連想配列からURLエンコードされたクエリ文字列を生成)

htmlspecialchars() 

HTMLの特殊文字として扱われる文字をHTMLエンティティに変換する。
(エスケープ)「<」などは「<」に変換され、HTMLタグとして扱われることを防げるほか、 
不正なスクリプトタグを仕込まれて実行されるリスクを回避できる。 
大抵は「ENT_QUOTES」フラグを用いてシングルクォートも変換対象にする。 

header() 

生の HTTP ヘッダーを出力する。 
「HTTP/1.0 404 Not Found」などのステータスコードを出力したり、
「Content-Type: image/jpeg」などのファイルヘッダーを出力することができる。 
「Location: http://www.example.com」とすることで指定された 
URL にリダイレクトする際にも用いられる。
 
nl2br() 

文字列の改行箇所を「<br>」などの改行タグに変換する。 

strip_tags() 

文字列から HTML タグを取り除く。 許可するタグを指定することもできる。 

http_build_query() 

連想配列からURLエンコードされたクエリ文字列を生成する。 
つまり配列を GET パラメータとして使える「foo=123&bar=hello」のような文字列に変換できる。

(URLとして利用できる文字列に変換・GET、POSTなどのパラメータをフィルタリングしたうえで受け取る・指定したフィルターでデータをフィルタリングする。・セッションを開始する。セッションハイジャック攻撃を防ぐ・セッション情報を全て破棄する・クッキーに値を保存する。)

rawurlencode(), rawurldecode() 

rawurlencode() は非アルファベット文字をパーセント記号と16進数を用いて 
URL として利用できる文字列に変換する。 
rawurldecode() によって元の文字列を復元できる。 

filter_input() 

GET、POST などのパラメータをフィルタリングしたうえで受け取る。 
$_GET、$_POST を直接操作するかわりにこの関数を通す。 

filter_var() 

指定したフィルターでデータをフィルタリングする。 
データがメールアドレスとして正しい書式であるかを調べたり、
特殊文字を取り除いたりするなど、様々なフィルタが利用できる。 

session_start() 

セッションを開始する。セッションIDを渡すことで現在のセッションを復帰することもできる。 

session_regenerate_id() 

セッションの情報を位置したままセッションIDを新しく生成した値に置き換える。
 セッションハイジャック攻撃を防ぐ手段として用いられる。 

session_destroy() 

セッション情報を全て破棄する。再開するには再度 session_start() する必要がある。 

setcookie() クッキーに値を保存する。有効期限を設定することもできる。

ハッシュ関連(ハッシュ値を生成する・MD5を使いハッシュ値を生成する・擬似乱数ハッシュ値を生成する・MIMEbase64でエンコード・デコードする・JSON形式で返したり・JSON→連想配列にする・マルチバイト文字に基づいたエンコード変換をしてメール送信)

hash() 

選択したアルゴリズムに基づいてハッシュ値を生成する。

md5() 

MD5 アルゴリズムを用いてハッシュ値を生成する。 

random_bytes() 

暗号論的に安全な疑似乱数生成器(CSPRNG)を使ったハッシュ値を作成。 

base64_encode(), base64_decode() 

文字列を MIME base64 方式でエンコード、デコードする。 

json_encode(), json_decode() 

連想配列を JSON 形式にして返したり、JSON 形式の文字列を連想配列に変換する。 

json_decode() を行う際第二引数に true を指定すると 
stdClass Object のかわりに連想配列に変換される。 

mb_send_mail() 

mb_language() により設定された言語に基づいてエンコード変換を行ってメールを送信する。

その他(ファイル読み込み・1つのみ読み込み・変数の内容表示・変数の詳細表示・
カウント・定数定義・)

require();
require_once();
include();
include_once(); 

別ファイルの読み込み。ファイル読み込めない場合にrequireはエラー、
includeは警告。_onceがついていると同名ファイルは1つのみ読込になる。
読み込む際は __DIR__ を使い絶対パスで指定する。 

print_r() 

変数の内容をわかりやすく表示する。 文字列に限らず連想配列も表示できるほか、
第二引数に true を指定することで結果を文字列として返すこともできる。 

var_dump() 

変数の内容を詳細にダンプする。 含まれるオブジェクトの型、内容を細かく知ることができる。
print_r() よりも詳細な内容を知りたい時に使う。 

count() 

配列やオブジェクトの要素数を数えて返す。 

define() 

定数を定義する。 大文字のアルファベットで名前をつける習慣がある。

その他(変数宣言されているか?Keyが存在するか?・空(0・Null、false)かどうか?・変数破棄・タイムスタンプ関連)

isset() 

変数が宣言されているか、配列にキーが存在するかを返す。 
内容が NULL であっても TRUE を返す。 
配列にキーが存在するかを調べる関数として array_key_exists() があるが、
そちらは ["key" => NULL] の場合 FALSE を返す。 

empty() 

変数の内容が空であるかを返す。空文字、「0」、空配列、NULL、FALSE などがからであると判断される。

unset() 指定した変数を破棄する。連想配列から一部のキーを取り除く際にも使える。 

time(), microtime() 現在のUNIXタイムスタンプを得る。 
1970年1月1日 00:00:00 GMT からの通算秒。 
マイクロ秒まで知りたい場合は microtime() を使う。

mktime()

時、分、秒、月、日、年 を指定することでその日時のUNIXタイムスタンプを得る。

date() 

UNIXタイムスタンプを日時を表す文字列としてフォーマットして出力する。
日時の取り扱いに関しては date() よりも DateTime クラスを利用するケースが増えている。
Carbonライブラリを使う事も多い。