array
foreach
foreach ($array as $key => $value) {
echo "\$array[$key] => $value.\n";
}
array_filter — コールバック関数を使用して、配列の要素をフィルタリングする
// $value が奇数のものでフィルタリング
// ARRAY_FILTER_USE_BOTH で value と key を扱える
$array = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
print_r(array_filter($array, function ($value, $key) {
return $value & 1;
}, ARRAY_FILTER_USE_BOTH));
// Array
// (
// [a] => 1
// [c] => 3
// [e] => 5
// )
array_map — 指定した配列の要素にコールバック関数を適用する
// $value の値を2倍する
$array = ['a' => 3, 'b' => 5, 'c' => 7];
print_r(array_map(function ($value) {
return $value * 2;
}, $array));
// Array
// (
// [a] => 6
// [b] => 10
// [c] => 14
// )
array_map で zip 操作
$a = [1, 2, 3, 4, 5];
$b = ['one', 'two', 'three', 'four', 'five'];
$c = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
print_r(array_map(null, $a, $b, $c));
// Array
// (
// [0] => Array
// (
// [0] => 1
// [1] => one
// [2] => uno
// )
// ...
// )
array_reduce — コールバック関数を用いて配列を普通の値に変更することにより、配列を再帰的に減らす
$array = array(1, 2, 3, 4, 5);
var_dump(array_reduce($array, function ($carry, $value) {
$carry *= $value;
return $carry;
}, 10));
// int(1200), because: 10*1*2*3*4*5
// initial に 10 を指定しているため初回の $carry は 10 になる
その他の有用そうな関数たち。
| array_keys |
配列のキーすべて、あるいはその一部を返す |
| array_values |
配列の全ての値を返す |
| array_merge |
ひとつまたは複数の配列をマージする |
code format
|
PHP がインストール済みであること。 |
| 項目 | 値 | 備考 |
|---|---|---|
formatter |
php-cs-fixer |
インストール
sudo curl -L https://cs.symfony.com/download/php-cs-fixer-v2.phar -o /usr/local/bin/php-cs-fixer
sudo chmod +x /usr/local/bin/php-cs-fixer
vscode における setting.json
{
"php.executablePath": "php",
"php-cs-fixer.executablePath": "php-cs-fixer",
"php-cs-fixer.onsave": true,
"php-cs-fixer.rules": "@PSR2",
}
laravel tips
ログ出力
// 配列で設定するのが大事
logger([$var]);
// sql と bind 変数を出力
$sql = DB::table('users')->where('status', '<>', 1);
logger([$sql->toSql(), $sql->getBindings()]);
// laravel のデバッグバーに出力
\Debugbar::info('debug!!!');
query builder で now を指定する場合は Carbon::now()
$job = $jobs->where('closing_at', '>=', Carbon::now())
->orderBy($sorter[0], $sorter[1])->paginate(24);
メールをログに出力する
# .env の MAIL_DRIVER に log を指定する
...
MAIL_DRIVER=log
...
パスワードのハッシュ生成
>>> \Hash::make('ffffffff');
=> "$2y$10$XYdOmfhh247f3vF5XInYe.ae1WBU9KpecyH.vwJpAdfxTj8BdBql."
artisan コマンド
# コマンドの一覧を見る
php artisan list
# migrate 用ファイルを生成する
php artisan make:migration create_links_table --create=links
# migration の実施状況を見る
php artisan migrate:status
# migrate する
php artisan migrate
# (denger!!!) all drop してから migrate する
php artisan migrate:fresh
# (denger!!!) all drop してから migrate して seed を埋め込む(テストデータをインサートする)
php artisan migrate:fresh --seed
# モデルとファクトリーの生成
php artisan make:model --factory Link
# xxx テーブル用の seeder 生成(テストデータ生成用ファイルの生成)
php artisan make:seeder LinksTableSeeder
# feature test (機能テスト) 用のファイルを生成
php artisan make:test SubmitLinksTest
# test の実行
php artisan test
laradock
スタートアップガイド
# ref. https://laravel-news.com/your-first-laravel-application
sudo apt update -y
sudo apt install -y php composer
composer create-project --prefer-dist laravel/laravel links "7.*"
# 初期化したプロジェクトのソースを一式コミット
git init
git add .
git commit
# laradock のディレクトリを無視
echo laradock >> .git/info/exclude
# laradock の設定
mkdir laradock
cd laradock
git init
git remote origin add $laradock_repo
git fetch
git checkout master
cp env-example .env
# COMPOSE_PROJECT_NAME を変えて docker のコンテナ名がコンフリクトしないようにする
vi .env
# laravel の DATABASE の接続情報を laradock に合わせる
vi ../.env
# laradock 起動
docker-compose up -d nginx mysql phpmyadmin
# laravel 初期化
docker-compose exec workspace composer install
docker-compose exec workspace php artisan key:generate
|
フロント側の |
ハッシュ化
// インタラクティブシェルを起動
// php -a
// MD5
echo md5('string');
// sha256
php > echo hash('sha256', 'ffffffff');
a44ba123189855990795e3260a64b34cdae6b29bf1c941818a34cba8bbc45575
暗号/復号化
// インタラクティブシェルを起動
// php -a
// 暗号化
echo openssl_encrypt($plaintext, 'aes-256-ecb', $key);
// 復号化
echo openssl_decrypt($data, 'aes-256-ecb', $key);
phpinfo の表示
# ブラウザから見る
echo '<?php phpinfo();' > phpinfo.php
# コマンドラインから見る
php -i