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 がインストール済みであること。

Table 1. 使用ライブラリ
項目 備考

formatter

php-cs-fixer

https://cs.symfony.com/

インストール
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

フロント側の npm xxx はコンテナの外でやった方がいいかも。 コンテナには node が入ってないっぽいので。

ハッシュ化

// インタラクティブシェルを起動
// 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