20201119のPHPに関する記事は19件です。

composer requireがメモリ不足で失敗しないために

この記事の目的

パッケージ間の依存関係の解消に
メモリを多く消費するパッケージ ( 筆者が遭遇するケース:Larastan ) を、

デフォルトの設定 ( 通常使用時には上限128MB[php.ini],
Composer使用時には上限1.5GBまで拡張される ) のまま、

インストール(composer require)を試みると、
次のように標準エラー出力されます。

Fatal error: Allowed memory size of 1610612736 bytes exhausted
 (tried to allocate 4096 bytes)

Check https://getcomposer.org/doc/articles/
troubleshooting.md#memory-limit-errors 
for more info on how to handle out of memory errors

エラー文に書いてあるComposer公式URLにアクセスすると、
2種類の解決策が提示されていて、

1番目の解決策の方は、既に多くの先人達が
Qiitaにたくさん記事を残してくださっていました。

ただ、バージニア州に拠点を置くagileana社のブログ記事を読んで以来、
私は2番目の解決策の方が好ましく感じているので
そちらも推したいと思い執筆に至りました。

表現の誤りや「もっとこうしたら便利だよ」といったアドバイスなどありましたら、
教えて頂けると勉強になります。

筆者の実行環境

software version
Docker 19.03.13
Docker Compose 1.27.4
PHP 7.4

コンテナのベースイメージ ( FROM命令で指定したイメージ ) は、
php:7.4-fpm を使用してします。

なぜこの方法が好ましいと思ったか?

agileana社のブログ記事の中で
Symfonyを採用したプロジェクトに携わっていたFlynn氏が
記しているこの部分です。

My initial thought to fix this issue was to modify the memory_limit setting found in my PHP main configuration file,
but it will not only apply for the PHP CLI but to all the PHP process that I’m running (i.e. Local web server and Symfony commands.)

This is a side effect I was not willing to accept.

I started to research about this case and found a very straightforward solution to it and it will only apply to the Composer command you apply it to.

The solution is to use the COMPOSER_MEMORY_LIMIT environment variable, setting its value to -1. It can be added to the current Terminal session with

「PHPのメイン設定ファイル(php.ini)の
 memory_limitディレクティブの値を
 直接、無制限にしてしまうと、
 PHP CLIに適用されるだけでなく、
 ローカルWebサーバやSymfonyフレームワークのコマンドからの
 メモリ使用制限までも、無制限になってしまうため、
 そういった副作用を受けたくありません
。」

composerコマンド実行時のみ、メモリ上限を引き上げる方法を見つけました。

と書いてありますね。

ちなみに、私がメインで触っているLaravelも、
vendorディレクトリ下で動くたくさんのSymfonyで書かれたプログラムに
お世話になっていますから親近感がありますね。

変更方法

ディレクトリ構成はこうなっています。

$ tree -L 3

.
├── docker
│   ├── db
│   │   └── data
│   ├── nginx
│   │   └── default.conf
│   └── php
│       ├── Dockerfile
│       └── php.ini
└─── docker-compose.yml

コンテナは3つ

  • appコンテナ (PHP環境)
  • nginxコンテナ
  • dbコンテナ

[手順1] コンテナ内で使用しているcomposerのPATHを確認

$ which composer

/usr/bin/composer

[手順2] environmentキーに環境変数COMPOSER_MEMORY_LIMITを追加。

appコンテナ (PHP環境)の部分に追記。

docker-compose.yml
services:
  app:
    environment:
      - COMPOSER_MEMORY_LIMIT= -1 /usr/bin/composer
  • 値を-1にすると、無制限。
    • [OK] 略称表記 (例: 2G )
    • [OK] 数値表記 (例:2147483648 )

[手順3] docker-compose.ymlの変更を反映させるために再ビルドを実行。

docker-compose up -d --build app

そもそも何にそんなにメモリを使用しているのか知りたい

composer require --dev nunomaduro/larastan --profile -vvv
--profileオプション

タイムとメモリ使用量を表示する。

-vvvオプション

インストール時の挙動を詳細に表示する
(-vよりも、-vv、そして、-vvvと、vの数が増えると、
より詳しく表示してくれます。)

実行すると、このようになります。

root@79255afbc2bf:/var/www/html# composer require --dev nunomaduro/larastan --profile -vvv

Reading ./composer.json
Loading config file ./composer.json
Checked CA file /etc/ssl/certs/ca-certificates.crt: valid
Executing command (/var/www/html): git branch --no-color --no-abbrev -v
Reading /root/.composer/composer.json
Loading config file /root/.composer/composer.json
Reading /var/www/html/vendor/composer/installed.json
Reading /root/.composer/vendor/composer/installed.json
Running 1.10.13 (2020-09-09 11:46:34) with PHP 7.4.11 on Linux / 4.19.76-linuxkit

[9.2MiB/0.01s] Downloading https://repo.packagist.org/packages.json
[9.3MiB/0.87s] Writing /root/.composer/cache/repo/https---repo.packagist.org/packages.json into cache
[9.3MiB/0.87s] Reading /root/.composer/cache/repo/https---repo.packagist.org/p-provider-2013.json from cache
[12.6MiB/0.89s] Reading /root/.composer/cache/repo/https---repo.packagist.org/p-provider-2014.json from cache
[19.8MiB/0.93s] Reading /root/.composer/cache/repo/https---repo.packagist.org/p-provider-2015.json from cache
[31.7MiB/0.98s] Reading /root/.composer/cache/repo/https---repo.packagist.org/p-provider-2016.json from cache
[46.6MiB/1.05s] Reading /root/.composer/cache/repo/https---repo.packagist.org/p-provider-2017.json from cache
[68.9MiB/1.15s] Downloading http://repo.packagist.org/p/provider-2018%2481dd16ef8b70152a886f398fcf7d35c20870bf64605fbcf78e7fb9baac1f5ac2.json
.
.
.
(中略)
.
.
.
[860.0MiB/174.09s] Generating optimized autoload files
[866.5MiB/209.97s] > post-autoload-dump: Illuminate\Foundation\ComposerScripts::postAutoloadDump
[870.4MiB/210.14s] > post-autoload-dump: @php artisan package:discover --ansi
[870.4MiB/210.14s] Executing command (CWD): '/usr/local/bin/php' -d allow_url_fopen='1' -d disable_functions='' -d memory_limit=' -1 /usr/bin/composer' artisan package:discover --ansi

[870.4MiB/211.65s] Discovered Package: facade/ignition
[870.4MiB/211.65s] Discovered Package: fideloper/proxy
[870.4MiB/211.65s] Discovered Package: laravel/tinker
[870.4MiB/211.65s] Discovered Package: nesbot/carbon
[870.4MiB/211.65s] Discovered Package: nunomaduro/collision

[870.4MiB/211.65s] Package manifest generated successfully.
[867.2MiB/211.79s] 56 packages you are using are looking for funding.
[867.2MiB/211.79s] Use the `composer fund` command to find out more!
[867.2MiB/211.79s] Memory usage: 867.22MiB (peak: 1783.7MiB), time: 211.79s

root@79255afbc2bf:/var/www/html# 

無事に、インストールできました!! :tada:

(余談) ちなみに、Allowed memory size of 1610612736 bytes exhaustedって数字は何?

1,610,612,736 bytes 
= 1.5 * (2^30)
= 1.5 * (2^10) * (2^10) * (2^10)
= 1.5 * 1,024 * 1,024 * 1,024
= 1.5 GB

この記事の冒頭で触れた、
Composer使用時のメモリ上限の1.5GBを使い果たしてしまいました。。。
ということですね!

Composer使用時にメモリ上限が1.5GBまで引き上げられる資料の参照
Note: Composer internally increases the memory_limit to 1.5G.

まとめ

メモリリークやcomposerについて調べるとても良い機会になりました。

思いの外、長くなってしまいましたが
ご覧頂きありがとうございます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Laravel] コードをコミット時に自動整形する

やりたいこと

複数人で開発時に、フォーマットを統一したい。
自動整形するやつ入れても実行し忘れるので、コミットのタイミングで何も考えることなく整形できるようにしたい。

やりかた

brainmaestro/composer-git-hooksというパッケージを使うと、git hook(gitの特定タイミングで色々できる)を簡単に使える

そしてfriendsofphp/php-cs-fixerを使うと、コードの規約違反を指摘/修正してくれる

まずはインストール

composer require --dev brainmaestro/composer-git-hooks
composer require --dev friendsofphp/php-cs-fixer

つぎに設定
composer.jsonextra"hooks"を追加
pre-commitをフックに、php-cs-fixerを使って自動フォーマットする。

composer.json
"extra": {
        "laravel": {
            "dont-discover": []
        },
        "hooks": {
            "pre-commit": [
                "./vendor/bin/php-cs-fixer fix .",
                "git add ."
            ]
        }
    },

反映して完了。

./vendor/bin/cghooks update
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Intercomの会話データぜんぶ抜く

TL;TR

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8

からファイルをダウンロードする。

<YOUR API KEY> の箇所を書き換える。

IntercomのPHPのSDKを同じ階層にcomposer経由でダウンロードする。

composer require intercom/intercom-php php-http/guzzle6-adapter

以下のコマンドで実行する。

php index.php

解説

IntercomのAPIを純粋に片っ端から叩いてデータを集めてきて最後に配列にして1行ずつCSVに書き出しています。

Intercomの画面上から会社やユーザー情報はCSVエクスポートできます。
会話のデータもエクスポートできますが、過去2年分でサマリーのみになるため、細かな会話のやり取りを出力するにはAPIを使う方法しかありません。(個々の会話の画面から plain text でダウンロードするボタンもありますが、件数が多いと大変かと思います。)

処理に時間がかかる

IntercomのAPIはレスポンスがそんなに早くなく、4年ほどの会話データおよそ2万行を抽出するのに10時間くらいかかりました。

RateLimitに引っかかることはなさそう

IntercomのAPIはたまにタイムアウトしてしまいます。

このスクリプトを回してる途中にRateLimitに引っかかるかなと思っていましたが、レスポンスが爆速でもないので引っかからずに最後まで処理できるかと思います。
https://developers.intercom.com/intercom-api-reference/reference#rate-limiting

タイムアウトするなど途中で処理が止まってしまうとまた最初からやり直しになってしまうため、会話データは最後にまとめてではなく1行ずつCSVに書き出すようにしています。

APIの結果をファイルに保存する

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L69

file_put_contents("admins.dat", serialize($admins));

のように配列を全部シリアライズしてファイルに書き出しているのは、途中でタイムアウトして失敗したときはそれ以前のAPIコール部分はファイルをデシリアライズしてそれを代替として使えるようにするためファイルに保存しています。

会話データのhtmlタグ除去

パラメータに 'display_as' => 'plaintext'を指定することでタグが除去されます。

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L124-L126

$result = $client->conversations->getConversations([
    'display_as' => 'plaintext'
]);

IntercomのAPI設計は微妙

ページングの処理が微妙

微妙というか過渡期というか、ページングの処理がまちまちです。

AWSをはじめ多くのAPIの設計が nextToken でページング処理をしていると思いますが、

https://developers.intercom.com/intercom-api-reference/reference#pagination

にあるようにパラメータに page= で渡すパターンが中心です。(v2.3時点)

contactsだけはなぜか

    "next": {
      "page": 4,
      "starting_after": "1HaSB+xrOyyMXAkS/c1RteCL7BzOzTvYjmjakgTergIH31eoe2v4/sbLsJWP\nIncfQLD3ouPkZlCwJ86F\n"
    }

のようにしてページ番号とともにページ送りをするためのトークンがセットされています。

https://developers.intercom.com/intercom-api-reference/reference#pagination-cursor

contacts取得時のページ送りの処理

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L86-L88

    if (! empty($result->pages->next)) {
        $result = $client->contacts->nextCursor($result->pages);
    }

とそれ以外のページ送りの処理

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L109-L111

    if (! empty($result->pages->next)) {
        $result = $client->nextPage($result->pages);
    }

が異なっているのは上記の理由からです。

逆にcontactsではnextPage()が動きません。

Intercom PHP SDK v4.4.2 の nextCursorPage バグ

2020年11月19日 時点での最新版 v4.4.2 には nextCursorPageの処理にバグがあります。

https://github.com/intercom/intercom-php/pull/323

でプルリクが出ていますが、APIを叩いたレスポンスをモデルに変換する処理が二重で行われているためエラーになります。

https://github.com/intercom/intercom-php/pull/323/files

のように修正する必要があります。

メインデータのレスポンスが微妙

管理者ユーザーの一覧データのレスポンスは

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L60-L62

    foreach ($result->admins as $admin) {
        $admins[$admin->id] = $admin->name;
    }

ですが、会社の一覧データのレスポンスは

https://gist.github.com/YoshiteruIwasaki/3edd71eb1d968fcfa4c56ef7a0bcfbd8#file-index-php-L104-L106

    foreach ($result->data as $company) {
        $companies[$company->id] = $company;
    }

だったりして、なぜか $result->admins のようなケースと $result->data のようなケースがあるので注意が必要です。

感想

IntercomのAPI叩いて会話のデータをCSV出力するのなんて世界のどこかに先人がいるだろう、と思っていましたが、Dockerのコンテナ上でCをコンパイルして会話データを取得するっぽいことをしてたりなんやかんやいいのがないので致し方なく自分でスクリプトを組みました。

とりあえず1回きりのデータ全出力、のつもりで作っているのでエラーハンドリングとかは無考慮です。

別にPHPじゃなくてPerlやRuby,Pythonでもいいんですが(JavaとNodeは下準備が多いので却下)
https://developers.intercom.com/building-apps/docs/sdks-plugins
用意されているSDKを見て、まあRubyより書き慣れているPHPで書いておくか、という判断をしました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPで敷居の高い掲示板作ってみた

はじめに

 前回、PHPで敷居の高い掲示板を作ってみた ~概要編~を書いてみたんですが、もっと詳しく書きたくなってきました(^^♪
なので、シリーズ化しようと思うのですが、項目がたくさんになりそうなので、リンクがまとまった記事を作っておきたいと思います。

この記事について

 この記事では、基本的にPHPのみによる「敷居の高い掲示板」の作り方を書いていこうと思います。敷居の高い掲示板とは、

メールアドレスの認証が絡んだ掲示板

であって、会員登録とかログインとかをせず投稿出来る手軽さと、管理者による投稿内容の管理がしっかりできるWEBアプリケーションです。

おしながき

以下に、各記事のリンクを張っていきます。ちなみに、0から100まで説明する気は無いです。重要だと思う事と、自分で考えた仕組みの中で記事にしておきたいもののみを書いていきます。

全部できる気がしませんが、気長に頑張りたいです(;^ω^)

  1. 概要編・・・PHPで敷居の高い掲示板を作ってみた ~概要編~
  2. HTTPの基本・・・[coming soon]
  3. Tokenの考え方・・・[coming soon]
  4. 一つのページでシーン管理・・・[coming soon]
  5. 入力フォーム・・・[coming soon]
  6. 閲覧ページ・・・[coming soon]
  7. 管理者ログインシステム(二段階認証)・・・[coming soon]

おわりに

 なんか「おわりに」を書かないと気持ち悪いんで書いておきます。僕は今までこういった、自分で作る&その説明書を作る、っていうのをやりたかったです。完全に、ゲームプログラミングの館に影響されています。僕の青春をささげた思い出のWebサイトです。
 という訳で、今回このような記事を作りました。それでは!
(まだ全然おわってないけどw)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

可変変数と可変関数 (PHP)

可変変数

変数を要いて、変数を動的に変える。

class ClassName
{
    private $hoge = 'ほげ';
    private $fuga = 'ふが';

    public function say(string $name = 'hoge')
    {
        echo "{$this->$name}です。よろしく。";
    }
}

$class = new ClassName;
$class->say('hoge'); // ほげです。よろしく。
$class->say('fuga'); // ふがです。よろしく。

可変関数

動的に呼び出す関数(メソッド)を変える。

class ClassName
{

    private $hoge = 'ほげ';
    private $fuga = 'ふが';

    public function say(string $name = 'hoge')
    {
        $method = "say$name";
        $this->$method();
    }

    private function sayHoge()
    {
        echo "{$this->hoge}だよ。みんな一度は聞いたことあるよね!!";
    }

    private function sayFuga()
    {
        echo "{$this->fuga}です。まだ聞いたことがない人もいると思うので、よろしくお願いします。";
    }
}

$class = new ClassName;
$class->say('hoge'); // ほげだよ。みんな一度は聞いたことあるよね!!
$class->say('fuga'); // ふがです。まだ聞いたことがない人もいると思うので、よろしくお願いします。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

paiza攻略 よく使うもの一覧(スキルチェックD〜Cランク) ~PHP~

はじめに

この記事ではpaizaのスキルチェック(PHP)で僕がよく使ったものを一覧にしてまとめています。
主にDランク・Cランクの問題を解くことを想定していますので、参考になれば幸いです。
また間違っている箇所などありましたらご指摘いただけると幸いです。
随時更新していく予定です。

基本系


trim

文字列の先頭および末尾にあるホワイトスペースを取り除く。
改行された値をそれぞれ「配列」にするために使う。
※paizaではほぼ無条件で入れると良い。

PHP
$input_line = trim(fgets(STDIN));


explode

" "で指定したもの(ここでは半角スペース)で文字列を分割して「配列」にする関数。

PHP
$input_line = fgets(STDIN);
//$input_line -> "250000 3"
$arr = explode(" ",$input_line);
//$arr -> ["250000","3"]


var_dump

デバッグ(プログラムの間違いを直すこと)に使う。
echoと違い配列の中身のデータ型などを細かく確認できる。

PHP
var_dump($arr);


print_r

デバッグに使う
var_dumpと違い配列のキーと値だけを確認したい時に使う。
変数に代入も可。

PHP
print_r($arr);


便利な書き方


$input_line = trim(fgets(STDIN));を繰り返す処理

PHP
for ($i = 0; $i < 7; $i++) {
  $input_line = trim(fgets(STDIN));
}

//以下と同じ↓

$input_line = trim(fgets(STDIN));
$input_line2 = trim(fgets(STDIN));
$input_line3 = trim(fgets(STDIN));
  .
  .
  .
$input_line6 = trim(fgets(STDIN));


要素を順番に配列に追加する

PHP
for ($i = 0; $i < 5; $i++) {
  $arr[] = trim(fgets(STDIN));
  // $input =trim(fgets(STDIN));
  // array_push($array,$input);
}


配列の値をそれぞれ変数に定義する

PHP
$input_line = trim(fgets(STDIN));
[$a, $b] = explode(" ",$input_line);


配列の初期化

PHP
$a = array();
//配列に要素を追加  $追加したい配列[] = 要素
$a[] = $num;


該当する出力が無い場合に指定の値を表示する

隠れ変数を使う。
主にfor文の中で使われる。

PHP
$sum = 0;
$a = "ガパオライス";
if(strpos($a,"カレー") !== false){
//$aの中に'カレー'が含まれている場合
  echo "カレーという文字がありました";
  $sum += 1;
}
if ($sum == 0) {
  echo "None";
}
//出力結果「None」

よく使う関数系

str_split

文字を分割して配列に追加する。

PHP
$input_line = trim(fgets(STDIN));
$arr = str_split($input_line);


str

n番目の文字を取得する。

PHP
$str = "ABCDEFG";
echo $str[2];
//実行結果→「C」


range

A〜Zまでの文字をそれぞれ配列に追加する。

PHP
$a = range('A', 'Z');
print_r($a);

//実行結果
//Array
//( [0] => A
//  [1] => B
//  [2] => C
//  ・
//  ・
//  ・
//)


array_search

配列の値を検索する。

PHP
$result = array_search($input_line, $a);
//配列$aの何番目に$input_lineの値があるかを調べる


abs

絶対値を求める。

PHP
 $a = abs(-100);
 echo $a;
 //実行結果「100」


strops

文字列内の部分文字列が最初に現れる場所を見つける。

PHP
$a = "カレーライス";
if(strpos($a,"カレー") !== false){
//$aの中に'カレー'が含まれている場合
  echo "カレーという文字がありました";
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelで画像を再度指定せずに編集可能な機能を作成

初投稿です。これからプログラミング学習のアウトプット始めていこうと思います。

世の中のサイト(主にSNS)ってユーザーアカウントにアイコン(画像)が設定可能ですよね。
それを編集するときアイコン以外(名前、プロフィール等)だけ編集してアイコンはいじらない場合、アイコン画像はそのまま変更なしでプロフィールの変更ができます。
でも自分でlaravelでサイトを作ってみて気づいたのが画像に対してはoldヘルパーが適用されずどうやったらその機能を実現できるのかという点です。

今回自分なりに思いついた実装方法を紹介していきます。

ルーティング

web.php
Route::get('/posts/edit/{post}', 'PostsController@edit');

暗黙の結合を使って編集ページにpostsテーブルからカラムを持っていきます
今回画像のカラム名はpathになります。

if文を使って実装できた

PostsController@edit
 public function update(Request $request, Post $post) {
        // 画像変更の確認
        if(!empty($request->path)) {
            $file = $request->file('path');
            $filename = $file->getClientOriginalName();
            $request->file('path')->storeAs('public',$filename);
            $post->path = '/storage/' . $filename;
        }else {
            $post->path = $post->path;
        }

編集ページのsubmitボタンが押されたとき、$request->pathがあれば(新たに画像が挿入されているなら)新たに画像に対してユニークな名前をつけそれを投稿の画像としてデータベースに登録、そうでないならば(画像が変更されていないなら)以前の画像のパスを再代入してデータベースに登録

これで実装ができました!普段使い慣れているサービスの機能を実装できると気持ちがいいですね:relaxed:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

~全パターン~ 【php用】47都道府県の配列(連想配列)

どうも7noteです。ほぼ自分用メモです。

漢字ひらがなローマ字等、「県」のアリナシなどよく使われる全表記パターンの配列を用意。
順番は北から順(都道府県番号順)になっています。

!!! 目次の利用を推奨 !!!

目次

  • 1次元配列(普通の配列)
    • ひらがな
    • カタカナ
    • 漢字(★)
    • ローマ字(★)
  • 2次元配列(連想配列)
    • キーが[数字]
      • [数字]=>ひらがな
      • [数字]=>カタカナ
      • [数字]=>漢字(★)
      • [数字]=>ローマ字(★)
    • キーが[ひらがな]
      • [ひらがな]=>ひらがな
      • [ひらがな]=>カタカナ
      • [ひらがな]=>漢字
      • [ひらがな]=>漢字 (不一致版)
      • [ひらがな]=>ローマ字
    • キーが[カタカナ]
      • [カタカナ]=>ひらがな
      • [カタカナ]=>漢字
      • [カタカナ]=>ローマ字
    • キーが[漢字]
      • [漢字]=>ひらがな
      • [漢字]=>ひらがな (不一致版)
      • [漢字]=>カタカナ
      • [漢字]=>漢字
      • [漢字]=>ローマ字
    • キーが[ローマ字]
      • [ローマ字]=>ひらがな
      • [ローマ字]=>カタカナ
      • [ローマ字]=>漢字(★)
  • 3次元配列(よく使うもののみ)
    • エリア漢字(ローマ字=>漢字)
    • エリアローマ字(ローマ字=>漢字)
  • 4次元配列(使わない。ネタ。)

※よく使うものには(★)マーク

1次元配列(普通の配列)

ひらがな

//「都府県」アリ
$list = array('ほっかいどう','あおもりけん','いわてけん','みやぎけん','あきたけん','やまがたけん','ふくしまけん','いばらきけん','とちぎけん','ぐんまけん','さいたまけん','ちばけん','とうきょうと','かながわけん','にいがたけん','とやまけん','いしかわけん','ふくいけん','やまなしけん','ながのけん','ぎふけん','しずおかけん','あいちけん','みえけん','しがけん','きょうとふ','おおさかふ','ひょうごけん','ならけん','わかやまけん','とっとりけん','しまねけん','おかやまけん','ひろしまけん','やまぐちけん','とくしまけん','かがわけん','えひめけん','こうちけん','ふくおかけん','さがけん','ながさきけん','くまもとけん','おおいたけん','みやざきけん','かごしまけん','おきなわけん');

//「都府県」ナシ
$list = array('ほっかいどう','あおもり','いわて','みやぎ','あきた','やまがた','ふくしま','いばらき','とちぎ','ぐんま','さいたま','ちば','とうきょう','かながわ','にいがた','とやま','いしかわ','ふくい','やまなし','ながの','ぎふ','しずおか','あいち','みえ','しが','きょうと','おおさか','ひょうご','なら','わかやま','とっとり','しまね','おかやま','ひろしま','やまぐち','とくしま','かがわ','えひめ','こうち','ふくおか','さが','ながさき','くまもと','おおいた','みやざき','かごしま','おきなわ');

カタカナ

//「都府県」ナシ
$list = array('ホッカイドウ','アオモリ','イワテ','ミヤギ','アキタ','ヤマガタ','フクシマ','イバラキ','トチギ','グンマ','サイタマ','チバ','トウキョウ','カナガワ','ニイガタ','ヤマナシ','ナガノ','トヤマ','イシカワ','フクイ','ギフ','シズオカ','アイチ','ミエ','シガ','キョウト','オオサカ','ヒョウゴ','ナラ','ワカヤマ','トットリ','シマネ','オカヤマ','ヒロシマ','ヤマグチ','トクシマ','カガワ','エヒメ','コウチ','フクオカ','サガ','ナガサキ','クマモト','オオイタ','ミヤザキ','カゴシマ','オキナワ');

漢字(★よく使う)

//「都府県」アリ
$list = array('北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県','茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県','三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県','山口県','徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県','沖縄県');

//「都府県」ナシ
$list = array('北海道','青森','岩手','宮城','秋田','山形','福島','茨城','栃木','群馬','埼玉','千葉','東京','神奈川','新潟','富山','石川','福井','山梨','長野','岐阜','静岡','愛知','三重','滋賀','京都','大阪','兵庫','奈良','和歌山','鳥取','島根','岡山','広島','山口','徳島','香川','愛媛','高知','福岡','佐賀','長崎','熊本','大分','宮崎','鹿児島','沖縄');

ローマ字(ヘボン式)(★よく使う)

//「都府県」ナシ
$list = array('hokkaido','aomori','iwate','miyagi','akita','yamagata','fukushima','ibaraki','tochigi','gunma','saitama','chiba','tokyo','kanagawa','niigata','yamanashi','nagano','toyama','ishikawa','fukui','gifu','shizuoka','aichi','mie','shiga','kyoto','osaka','hyogo','nara','wakayama','tottori','shimane','oakayama','hiroshima','yamaguchi','tokushima','kagawa','ehime','kochi','fukuoka','saga','nagasaki','kumamoto','oita','miyazaki','kagoshima','okinawa');

2次元配列(連想配列)

▼キーが[数字]

・[数字]=>ひらがな

//「都府県」アリ
$list = array('1'=>'ほっかいどう','2'=>'あおもりけん','3'=>'いわてけん','4'=>'みやぎけん','5'=>'あきたけん','6'=>'やまがたけん','7'=>'ふくしまけん','8'=>'いばらきけん','9'=>'とちぎけん','10'=>'ぐんまけん','11'=>'さいたまけん','12'=>'ちばけん','13'=>'とうきょうと','14'=>'かながわけん','15'=>'にいがたけん','16'=>'とやまけん','17'=>'いしかわけん','18'=>'ふくいけん','19'=>'やまなしけん','20'=>'ながのけん','21'=>'ぎふけん','22'=>'しずおかけん','23'=>'あいちけん','24'=>'みえけん','25'=>'しがけん','26'=>'きょうとふ','27'=>'おおさかふ','28'=>'ひょうごけん','29'=>'ならけん','30'=>'わかやまけん','31'=>'とっとりけん','32'=>'しまねけん','33'=>'おかやまけん','34'=>'ひろしまけん','35'=>'やまぐちけん','36'=>'とくしまけん','37'=>'かがわけん','38'=>'えひめけん','39'=>'こうちけん','40'=>'ふくおかけん','41'=>'さがけん','42'=>'ながさきけん','43'=>'くまもとけん','44'=>'おおいたけん','45'=>'みやざきけん','46'=>'かごしまけん','47'=>'おきなわけん');

//「都府県」ナシ
$list = array('1'=>'ほっかいどう','2'=>'あおもり','3'=>'いわて','4'=>'みやぎ','5'=>'あきた','6'=>'やまがた','7'=>'ふくしま','8'=>'いばらき','9'=>'とちぎ','10'=>'ぐんま','11'=>'さいたま','12'=>'ちば','13'=>'とうきょう','14'=>'かながわ','15'=>'にいがた','16'=>'とやま','17'=>'いしかわ','18'=>'ふくい','19'=>'やまなし','20'=>'ながの','21'=>'ぎふ','22'=>'しずおか','23'=>'あいち','24'=>'みえ','25'=>'しが','26'=>'きょうと','27'=>'おおさか','28'=>'ひょうご','29'=>'なら','30'=>'わかやま','31'=>'とっとり','32'=>'しまね','33'=>'おかやま','34'=>'ひろしま','35'=>'やまぐち','36'=>'とくしま','37'=>'かがわ','38'=>'えひめ','39'=>'こうち','40'=>'ふくおか','41'=>'さが','42'=>'ながさき','43'=>'くまもと','44'=>'おおいた','45'=>'みやざき','46'=>'かごしま','47'=>'おきなわ');

・[数字]=>カタカナ

//「都府県」ナシ
$list = array('1'=>'ホッカイドウ','2'=>'アオモリ','3'=>'イワテ','4'=>'ミヤギ','5'=>'アキタ','6'=>'ヤマガタ','7'=>'フクシマ','8'=>'イバラキ','9'=>'トチギ','10'=>'グンマ','11'=>'サイタマ','12'=>'チバ','13'=>'トウキョウ','14'=>'カナガワ','15'=>'ニイガタ','16'=>'ヤマナシ','17'=>'ナガノ','18'=>'トヤマ','19'=>'イシカワ','20'=>'フクイ','21'=>'ギフ','22'=>'シズオカ','23'=>'アイチ','24'=>'ミエ','25'=>'シガ','26'=>'キョウト','27'=>'オオサカ','28'=>'ヒョウゴ','29'=>'ナラ','30'=>'ワカヤマ','31'=>'トットリ','32'=>'シマネ','33'=>'オカヤマ','34'=>'ヒロシマ','35'=>'ヤマグチ','36'=>'トクシマ','37'=>'カガワ','38'=>'エヒメ','39'=>'コウチ','40'=>'フクオカ','41'=>'サガ','42'=>'ナガサキ','43'=>'クマモト','44'=>'オオイタ','45'=>'ミヤザキ','46'=>'カゴシマ','47'=>'オキナワ');

・[数字]=>漢字(★よく使う)

//「都府県」アリ
$list = array('1'=>'北海道','2'=>'青森県','3'=>'岩手県','4'=>'宮城県','5'=>'秋田県','6'=>'山形県','7'=>'福島県','8'=>'茨城県','9'=>'栃木県','10'=>'群馬県','11'=>'埼玉県','12'=>'千葉県','13'=>'東京都','14'=>'神奈川県','15'=>'新潟県','16'=>'富山県','17'=>'石川県','18'=>'福井県','19'=>'山梨県','20'=>'長野県','21'=>'岐阜県','22'=>'静岡県','23'=>'愛知県','24'=>'三重県','25'=>'滋賀県','26'=>'京都府','27'=>'大阪府','28'=>'兵庫県','29'=>'奈良県','30'=>'和歌山県','31'=>'鳥取県','32'=>'島根県','33'=>'岡山県','34'=>'広島県','35'=>'山口県','36'=>'徳島県','37'=>'香川県','38'=>'愛媛県','39'=>'高知県','40'=>'福岡県','41'=>'佐賀県','42'=>'長崎県','43'=>'熊本県','44'=>'大分県','45'=>'宮崎県','46'=>'鹿児島県','47'=>'沖縄県');

//「都府県」ナシ
$list = array('1'=>'北海道','2'=>'青森','3'=>'岩手','4'=>'宮城','5'=>'秋田','6'=>'山形','7'=>'福島','8'=>'茨城','9'=>'栃木','10'=>'群馬','11'=>'埼玉','12'=>'千葉','13'=>'東京','14'=>'神奈川','15'=>'新潟','16'=>'富山','17'=>'石川','18'=>'福井','19'=>'山梨','20'=>'長野','21'=>'岐阜','22'=>'静岡','23'=>'愛知','24'=>'三重','25'=>'滋賀','26'=>'京都','27'=>'大阪','28'=>'兵庫','29'=>'奈良','30'=>'和歌山','31'=>'鳥取','32'=>'島根','33'=>'岡山','34'=>'広島','35'=>'山口','36'=>'徳島','37'=>'香川','38'=>'愛媛','39'=>'高知','40'=>'福岡','41'=>'佐賀','42'=>'長崎','43'=>'熊本','44'=>'大分','45'=>'宮崎','46'=>'鹿児島','47'=>'沖縄');

・[数字]=>ローマ字(ヘボン式)(★よく使う)

//「都府県」ナシ
$list = array('1'=>'hokkaido','2'=>'aomori','3'=>'iwate','4'=>'miyagi','5'=>'akita','6'=>'yamagata','7'=>'fukushima','8'=>'ibaraki','9'=>'tochigi','10'=>'gunma','11'=>'saitama','12'=>'chiba','13'=>'tokyo','14'=>'kanagawa','15'=>'niigata','16'=>'yamanashi','17'=>'nagano','18'=>'toyama','19'=>'ishikawa','20'=>'fukui','21'=>'gifu','22'=>'shizuoka','23'=>'aichi','24'=>'mie','25'=>'shiga','26'=>'kyoto','27'=>'osaka','28'=>'hyogo','29'=>'nara','30'=>'wakayama','31'=>'tottori','32'=>'shimane','33'=>'oakayama','34'=>'hiroshima','35'=>'yamaguchi','36'=>'tokushima','37'=>'kagawa','38'=>'ehime','39'=>'kochi','40'=>'fukuoka','41'=>'saga','42'=>'nagasaki','43'=>'kumamoto','44'=>'oita','45'=>'miyazaki','46'=>'kagoshima','47'=>'okinawa');

▼キーが[ひらがな]

・[ひらがな]=>ひらがな

//「都府県」アリからナシ
$list = array('ほっかいどう'=>'ほっかいどう','あおもりけん'=>'あおもり','いわてけん'=>'いわて','みやぎけん'=>'みやぎ','あきたけん'=>'あきた','やまがたけん'=>'やまがた','ふくしまけん'=>'ふくしま','いばらきけん'=>'いばらき','とちぎけん'=>'とちぎ','ぐんまけん'=>'ぐんま','さいたまけん'=>'さいたま','ちばけん'=>'ちば','とうきょうと'=>'とうきょう','かながわけん'=>'かながわ','にいがたけん'=>'にいがた','とやまけん'=>'とやま','いしかわけん'=>'いしかわ','ふくいけん'=>'ふくい','やまなしけん'=>'やまなし','ながのけん'=>'ながの','ぎふけん'=>'ぎふ','しずおかけん'=>'しずおか','あいちけん'=>'あいち','みえけん'=>'みえ','しがけん'=>'しが','きょうとふ'=>'きょうと','おおさかふ'=>'おおさか','ひょうごけん'=>'ひょうご','ならけん'=>'なら','わかやまけん'=>'わかやま','とっとりけん'=>'とっとり','しまねけん'=>'しまね','おかやまけん'=>'おかやま','ひろしまけん'=>'ひろしま','やまぐちけん'=>'やまぐち','とくしまけん'=>'とくしま','かがわけん'=>'かがわ','えひめけん'=>'えひめ','こうちけん'=>'こうち','ふくおかけん'=>'ふくおか','さがけん'=>'さが','ながさきけん'=>'ながさき','くまもとけん'=>'くまもと','おおいたけん'=>'おおいた','みやざきけん'=>'みやざき','かごしまけん'=>'かごしま','おきなわけん'=>'おきなわ');

//「都府県」ナシからアリ
$list = array('ほっかいどう'=>'ほっかいどう','あおもり'=>'あおもりけん','いわて'=>'いわてけん','みやぎ'=>'みやぎけん','あきた'=>'あきたけん','やまがた'=>'やまがたけん','ふくしま'=>'ふくしまけん','いばらき'=>'いばらきけん','とちぎ'=>'とちぎけん','ぐんま'=>'ぐんまけん','さいたま'=>'さいたまけん','ちば'=>'ちばけん','とうきょう'=>'とうきょうと','かながわ'=>'かながわけん','にいがた'=>'にいがたけん','とやま'=>'とやまけん','いしかわ'=>'いしかわけん','ふくい'=>'ふくいけん','やまなし'=>'やまなしけん','ながの'=>'ながのけん','ぎふ'=>'ぎふけん','しずおか'=>'しずおかけん','あいち'=>'あいちけん','みえ'=>'みえけん','しが'=>'しがけん','きょうと'=>'きょうとふ','おおさか'=>'おおさかふ','ひょうご'=>'ひょうごけん','なら'=>'ならけん','わかやま'=>'わかやまけん','とっとり'=>'とっとりけん','しまね'=>'しまねけん','おかやま'=>'おかやまけん','ひろしま'=>'ひろしまけん','やまぐち'=>'やまぐちけん','とくしま'=>'とくしまけん','かがわ'=>'かがわけん','えひめ'=>'えひめけん','こうち'=>'こうちけん','ふくおか'=>'ふくおかけん','さが'=>'さがけん','ながさき'=>'ながさきけん','くまもと'=>'くまもとけん','おおいた'=>'おおいたけん','みやざき'=>'みやざきけん','かごしま'=>'かごしまけん','おきなわ'=>'おきなわけん');

・[ひらがな]=>カタカナ

//「都府県」アリ(ひらがなのみ)
$list = array('ほっかいどう'=>'ホッカイドウ','あおもりけん'=>'アオモリ','いわてけん'=>'イワテ','みやぎけん'=>'ミヤギ','あきたけん'=>'アキタ','やまがたけん'=>'ヤマガタ','ふくしまけん'=>'フクシマ','いばらきけん'=>'イバラキ','とちぎけん'=>'トチギ','ぐんまけん'=>'グンマ','さいたまけん'=>'サイタマ','ちばけん'=>'チバ','とうきょうと'=>'トウキョウ','かながわけん'=>'カナガワ','にいがたけん'=>'ニイガタ','とやまけん'=>'ヤマナシ','いしかわけん'=>'ナガノ','ふくいけん'=>'トヤマ','やまなしけん'=>'イシカワ','ながのけん'=>'フクイ','ぎふけん'=>'ギフ','しずおかけん'=>'シズオカ','あいちけん'=>'アイチ','みえけん'=>'ミエ','しがけん'=>'シガ','きょうとふ'=>'キョウト','おおさかふ'=>'オオサカ','ひょうごけん'=>'ヒョウゴ','ならけん'=>'ナラ','わかやまけん'=>'ワカヤマ','とっとりけん'=>'トットリ','しまねけん'=>'シマネ','おかやまけん'=>'オカヤマ','ひろしまけん'=>'ヒロシマ','やまぐちけん'=>'ヤマグチ','とくしまけん'=>'トクシマ','かがわけん'=>'カガワ','えひめけん'=>'エヒメ','こうちけん'=>'コウチ','ふくおかけん'=>'フクオカ','さがけん'=>'サガ','ながさきけん'=>'ナガサキ','くまもとけん'=>'クマモト','おおいたけん'=>'オオイタ','みやざきけん'=>'ミヤザキ','かごしまけん'=>'カゴシマ','おきなわけん'=>'オキナワ');

//「都府県」ナシ
$list = array('ほっかいどう'=>'ホッカイドウ','あおもり'=>'アオモリ','いわて'=>'イワテ','みやぎ'=>'ミヤギ','あきた'=>'アキタ','やまがた'=>'ヤマガタ','ふくしま'=>'フクシマ','いばらき'=>'イバラキ','とちぎ'=>'トチギ','ぐんま'=>'グンマ','さいたま'=>'サイタマ','ちば'=>'チバ','とうきょう'=>'トウキョウ','かながわ'=>'カナガワ','にいがた'=>'ニイガタ','とやま'=>'ヤマナシ','いしかわ'=>'ナガノ','ふくい'=>'トヤマ','やまなし'=>'イシカワ','ながの'=>'フクイ','ぎふ'=>'ギフ','しずおか'=>'シズオカ','あいち'=>'アイチ','みえ'=>'ミエ','しが'=>'シガ','きょうと'=>'キョウト','おおさか'=>'オオサカ','ひょうご'=>'ヒョウゴ','なら'=>'ナラ','わかやま'=>'ワカヤマ','とっとり'=>'トットリ','しまね'=>'シマネ','おかやま'=>'オカヤマ','ひろしま'=>'ヒロシマ','やまぐち'=>'ヤマグチ','とくしま'=>'トクシマ','かがわ'=>'カガワ','えひめ'=>'エヒメ','こうち'=>'コウチ','ふくおか'=>'フクオカ','さが'=>'サガ','ながさき'=>'ナガサキ','くまもと'=>'クマモト','おおいた'=>'オオイタ','みやざき'=>'ミヤザキ','かごしま'=>'カゴシマ','おきなわ'=>'オキナワ');

・[ひらがな]=>漢字

//「都府県」アリ
$list = array('ほっかいどう'=>'北海道','あおもりけん'=>'青森県','いわてけん'=>'岩手県','みやぎけん'=>'宮城県','あきたけん'=>'秋田県','やまがたけん'=>'山形県','ふくしまけん'=>'福島県','いばらきけん'=>'茨城県','とちぎけん'=>'栃木県','ぐんまけん'=>'群馬県','さいたまけん'=>'埼玉県','ちばけん'=>'千葉県','とうきょうと'=>'東京都','かながわけん'=>'神奈川県','にいがたけん'=>'新潟県','とやまけん'=>'富山県','いしかわけん'=>'石川県','ふくいけん'=>'福井県','やまなしけん'=>'山梨県','ながのけん'=>'長野県','ぎふけん'=>'岐阜県','しずおかけん'=>'静岡県','あいちけん'=>'愛知県','みえけん'=>'三重県','しがけん'=>'滋賀県','きょうとふ'=>'京都府','おおさかふ'=>'大阪府','ひょうごけん'=>'兵庫県','ならけん'=>'奈良県','わかやまけん'=>'和歌山県','とっとりけん'=>'鳥取県','しまねけん'=>'島根県','おかやまけん'=>'岡山県','ひろしまけん'=>'広島県','やまぐちけん'=>'山口県','とくしまけん'=>'徳島県','かがわけん'=>'香川県','えひめけん'=>'愛媛県','こうちけん'=>'高知県','ふくおかけん'=>'福岡県','さがけん'=>'佐賀県','ながさきけん'=>'長崎県','くまもとけん'=>'熊本県','おおいたけん'=>'大分県','みやざきけん'=>'宮崎県','かごしまけん'=>'鹿児島県','おきなわけん'=>'沖縄県');

//「都府県」ナシ
$list = array('ほっかいどう'=>'北海道','あおもり'=>'青森','いわて'=>'岩手','みやぎ'=>'宮城','あきた'=>'秋田','やまがた'=>'山形','ふくしま'=>'福島','いばらき'=>'茨城','とちぎ'=>'栃木','ぐんま'=>'群馬','さいたま'=>'埼玉','ちば'=>'千葉','とうきょう'=>'東京','かながわ'=>'神奈川','にいがた'=>'新潟','とやま'=>'富山','いしかわ'=>'石川','ふくい'=>'福井','やまなし'=>'山梨','ながの'=>'長野','ぎふ'=>'岐阜','しずおか'=>'静岡','あいち'=>'愛知','みえ'=>'三重','しが'=>'滋賀','きょうと'=>'京都','おおさか'=>'大阪','ひょうご'=>'兵庫','なら'=>'奈良','わかやま'=>'和歌山','とっとり'=>'鳥取','しまね'=>'島根','おかやま'=>'岡山','ひろしま'=>'広島','やまぐち'=>'山口','とくしま'=>'徳島','かがわ'=>'香川','えひめ'=>'愛媛','こうち'=>'高知','ふくおか'=>'福岡','さが'=>'佐賀','ながさき'=>'長崎','くまもと'=>'熊本','おおいた'=>'大分','みやざき'=>'宮崎','かごしま'=>'鹿児島','おきなわ'=>'沖縄');

・[ひらがな]=>漢字 (不一致版)

//「都府県」(アリ→ナシ)
$list = array('ほっかいどう'=>'北海道','あおもりけん'=>'青森','いわてけん'=>'岩手','みやぎけん'=>'宮城','あきたけん'=>'秋田','やまがたけん'=>'山形','ふくしまけん'=>'福島','いばらきけん'=>'茨城','とちぎけん'=>'栃木','ぐんまけん'=>'群馬','さいたまけん'=>'埼玉','ちばけん'=>'千葉','とうきょうと'=>'東京','かながわけん'=>'神奈川','にいがたけん'=>'新潟','とやまけん'=>'富山','いしかわけん'=>'石川','ふくいけん'=>'福井','やまなしけん'=>'山梨','ながのけん'=>'長野','ぎふけん'=>'岐阜','しずおかけん'=>'静岡','あいちけん'=>'愛知','みえけん'=>'三重','しがけん'=>'滋賀','きょうとふ'=>'京都','おおさかふ'=>'大阪','ひょうごけん'=>'兵庫','ならけん'=>'奈良','わかやまけん'=>'和歌山','とっとりけん'=>'鳥取','しまねけん'=>'島根','おかやまけん'=>'岡山','ひろしまけん'=>'広島','やまぐちけん'=>'山口','とくしまけん'=>'徳島','かがわけん'=>'香川','えひめけん'=>'愛媛','こうちけん'=>'高知','ふくおかけん'=>'福岡','さがけん'=>'佐賀','ながさきけん'=>'長崎','くまもとけん'=>'熊本','おおいたけん'=>'大分','みやざきけん'=>'宮崎','かごしまけん'=>'鹿児島','おきなわけん'=>'沖縄');

//「都府県」(ナシ→アリ)
$list = array('ほっかいどう'=>'北海道','あおもり'=>'青森県','いわて'=>'岩手県','みやぎ'=>'宮城県','あきた'=>'秋田県','やまがた'=>'山形県','ふくしま'=>'福島県','いばらき'=>'茨城県','とちぎ'=>'栃木県','ぐんま'=>'群馬県','さいたま'=>'埼玉県','ちば'=>'千葉県','とうきょう'=>'東京都','かながわ'=>'神奈川県','にいがた'=>'新潟県','とやま'=>'富山県','いしかわ'=>'石川県','ふくい'=>'福井県','やまなし'=>'山梨県','ながの'=>'長野県','ぎふ'=>'岐阜県','しずおか'=>'静岡県','あいち'=>'愛知県','みえ'=>'三重県','しが'=>'滋賀県','きょうと'=>'京都府','おおさか'=>'大阪府','ひょうご'=>'兵庫県','なら'=>'奈良県','わかやま'=>'和歌山県','とっとり'=>'鳥取県','しまね'=>'島根県','おかやま'=>'岡山県','ひろしま'=>'広島県','やまぐち'=>'山口県','とくしま'=>'徳島県','かがわ'=>'香川県','えひめ'=>'愛媛県','こうち'=>'高知県','ふくおか'=>'福岡県','さが'=>'佐賀県','ながさき'=>'長崎県','くまもと'=>'熊本県','おおいた'=>'大分県','みやざき'=>'宮崎県','かごしま'=>'鹿児島県','おきなわ'=>'沖縄県');

・[ひらがな]=>ローマ字

//「都府県」アリ(ひらがなのみ)
$list = array('ほっかいどう'=>'hokkaido','あおもりけん'=>'aomori','いわてけん'=>'iwate','みやぎけん'=>'miyagi','あきたけん'=>'akita','やまがたけん'=>'yamagata','ふくしまけん'=>'fukushima','いばらきけん'=>'ibaraki','とちぎけん'=>'tochigi','ぐんまけん'=>'gunma','さいたまけん'=>'saitama','ちばけん'=>'chiba','とうきょうと'=>'tokyo','かながわけん'=>'kanagawa','にいがたけん'=>'niigata','とやまけん'=>'yamanashi','いしかわけん'=>'nagano','ふくいけん'=>'toyama','やまなしけん'=>'ishikawa','ながのけん'=>'fukui','ぎふけん'=>'gifu','しずおかけん'=>'shizuoka','あいちけん'=>'aichi','みえけん'=>'mie','しがけん'=>'shiga','きょうとふ'=>'kyoto','おおさかふ'=>'osaka','ひょうごけん'=>'hyogo','ならけん'=>'nara','わかやまけん'=>'wakayama','とっとりけん'=>'tottori','しまねけん'=>'shimane','おかやまけん'=>'oakayama','ひろしまけん'=>'hiroshima','やまぐちけん'=>'yamaguchi','とくしまけん'=>'tokushima','かがわけん'=>'kagawa','えひめけん'=>'ehime','こうちけん'=>'kochi','ふくおかけん'=>'fukuoka','さがけん'=>'saga','ながさきけん'=>'nagasaki','くまもとけん'=>'kumamoto','おおいたけん'=>'oita','みやざきけん'=>'miyazaki','かごしまけん'=>'kagoshima','おきなわけん'=>'okinawa');

//「都府県」ナシ
$list = array('ほっかいどう'=>'hokkaido','あおもり'=>'aomori','いわて'=>'iwate','みやぎ'=>'miyagi','あきた'=>'akita','やまがた'=>'yamagata','ふくしま'=>'fukushima','いばらき'=>'ibaraki','とちぎ'=>'tochigi','ぐんま'=>'gunma','さいたま'=>'saitama','ちば'=>'chiba','とうきょう'=>'tokyo','かながわ'=>'kanagawa','にいがた'=>'niigata','とやま'=>'yamanashi','いしかわ'=>'nagano','ふくい'=>'toyama','やまなし'=>'ishikawa','ながの'=>'fukui','ぎふ'=>'gifu','しずおか'=>'shizuoka','あいち'=>'aichi','みえ'=>'mie','しが'=>'shiga','きょうと'=>'kyoto','おおさか'=>'osaka','ひょうご'=>'hyogo','なら'=>'nara','わかやま'=>'wakayama','とっとり'=>'tottori','しまね'=>'shimane','おかやま'=>'oakayama','ひろしま'=>'hiroshima','やまぐち'=>'yamaguchi','とくしま'=>'tokushima','かがわ'=>'kagawa','えひめ'=>'ehime','こうち'=>'kochi','ふくおか'=>'fukuoka','さが'=>'saga','ながさき'=>'nagasaki','くまもと'=>'kumamoto','おおいた'=>'oita','みやざき'=>'miyazaki','かごしま'=>'kagoshima','おきなわ'=>'okinawa');

▼キーが[カタカナ]

・[カタカナ]=>ひらがな

//「都府県」ナシ
$list = array('ホッカイドウ'=>'ほっかいどう','アオモリ'=>'あおもりけん','イワテ'=>'いわてけん','ミヤギ'=>'みやぎけん','アキタ'=>'あきたけん','ヤマガタ'=>'やまがたけん','フクシマ'=>'ふくしまけん','イバラキ'=>'いばらきけん','トチギ'=>'とちぎけん','グンマ'=>'ぐんまけん','サイタマ'=>'さいたまけん','チバ'=>'ちばけん','トウキョウ'=>'とうきょうと','カナガワ'=>'かながわけん','ニイガタ'=>'にいがたけん','ヤマナシ'=>'とやまけん','ナガノ'=>'いしかわけん','トヤマ'=>'ふくいけん','イシカワ'=>'やまなしけん','フクイ'=>'ながのけん','ギフ'=>'ぎふけん','シズオカ'=>'しずおかけん','アイチ'=>'あいちけん','ミエ'=>'みえけん','シガ'=>'しがけん','キョウト'=>'きょうとふ','オオサカ'=>'おおさかふ','ヒョウゴ'=>'ひょうごけん','ナラ'=>'ならけん','ワカヤマ'=>'わかやまけん','トットリ'=>'とっとりけん','シマネ'=>'しまねけん','オカヤマ'=>'おかやまけん','ヒロシマ'=>'ひろしまけん','ヤマグチ'=>'やまぐちけん','トクシマ'=>'とくしまけん','カガワ'=>'かがわけん','エヒメ'=>'えひめけん','コウチ'=>'こうちけん','フクオカ'=>'ふくおかけん','サガ'=>'さがけん','ナガサキ'=>'ながさきけん','クマモト'=>'くまもとけん','オオイタ'=>'おおいたけん','ミヤザキ'=>'みやざきけん','カゴシマ'=>'かごしまけん','オキナワ'=>'おきなわけん');

//「都府県」ナシからアリ
$list = array('ホッカイドウ'=>'ほっかいどう','アオモリ'=>'あおもり','イワテ'=>'いわて','ミヤギ'=>'みやぎ','アキタ'=>'あきた','ヤマガタ'=>'やまがた','フクシマ'=>'ふくしま','イバラキ'=>'いばらき','トチギ'=>'とちぎ','グンマ'=>'ぐんま','サイタマ'=>'さいたま','チバ'=>'ちば','トウキョウ'=>'とうきょう','カナガワ'=>'かながわ','ニイガタ'=>'にいがた','ヤマナシ'=>'とやま','ナガノ'=>'いしかわ','トヤマ'=>'ふくい','イシカワ'=>'やまなし','フクイ'=>'ながの','ギフ'=>'ぎふ','シズオカ'=>'しずおか','アイチ'=>'あいち','ミエ'=>'みえ','シガ'=>'しが','キョウト'=>'きょうと','オオサカ'=>'おおさか','ヒョウゴ'=>'ひょうご','ナラ'=>'なら','ワカヤマ'=>'わかやま','トットリ'=>'とっとり','シマネ'=>'しまね','オカヤマ'=>'おかやま','ヒロシマ'=>'ひろしま','ヤマグチ'=>'やまぐち','トクシマ'=>'とくしま','カガワ'=>'かがわ','エヒメ'=>'えひめ','コウチ'=>'こうち','フクオカ'=>'ふくおか','サガ'=>'さが','ナガサキ'=>'ながさき','クマモト'=>'くまもと','オオイタ'=>'おおいた','ミヤザキ'=>'みやざき','カゴシマ'=>'かごしま','オキナワ'=>'おきなわ');

・[カタカナ]=>漢字

//「都府県」ナシ
$list = array('ホッカイドウ'=>'北海道','アオモリ'=>'青森','イワテ'=>'岩手','ミヤギ'=>'宮城','アキタ'=>'秋田','ヤマガタ'=>'山形','フクシマ'=>'福島','イバラキ'=>'茨城','トチギ'=>'栃木','グンマ'=>'群馬','サイタマ'=>'埼玉','チバ'=>'千葉','トウキョウ'=>'東京','カナガワ'=>'神奈川','ニイガタ'=>'新潟','ヤマナシ'=>'富山','ナガノ'=>'石川','トヤマ'=>'福井','イシカワ'=>'山梨','フクイ'=>'長野','ギフ'=>'岐阜','シズオカ'=>'静岡','アイチ'=>'愛知','ミエ'=>'三重','シガ'=>'滋賀','キョウト'=>'京都','オオサカ'=>'大阪','ヒョウゴ'=>'兵庫','ナラ'=>'奈良','ワカヤマ'=>'和歌山','トットリ'=>'鳥取','シマネ'=>'島根','オカヤマ'=>'岡山','ヒロシマ'=>'広島','ヤマグチ'=>'山口','トクシマ'=>'徳島','カガワ'=>'香川','エヒメ'=>'愛媛','コウチ'=>'高知','フクオカ'=>'福岡','サガ'=>'佐賀','ナガサキ'=>'長崎','クマモト'=>'熊本','オオイタ'=>'大分','ミヤザキ'=>'宮崎','カゴシマ'=>'鹿児島','オキナワ'=>'沖縄');

//「都府県」ナシからアリ
$list = array('ホッカイドウ'=>'北海道','アオモリ'=>'青森県','イワテ'=>'岩手県','ミヤギ'=>'宮城県','アキタ'=>'秋田県','ヤマガタ'=>'山形県','フクシマ'=>'福島県','イバラキ'=>'茨城県','トチギ'=>'栃木県','グンマ'=>'群馬県','サイタマ'=>'埼玉県','チバ'=>'千葉県','トウキョウ'=>'東京都','カナガワ'=>'神奈川県','ニイガタ'=>'新潟県','ヤマナシ'=>'富山県','ナガノ'=>'石川県','トヤマ'=>'福井県','イシカワ'=>'山梨県','フクイ'=>'長野県','ギフ'=>'岐阜県','シズオカ'=>'静岡県','アイチ'=>'愛知県','ミエ'=>'三重県','シガ'=>'滋賀県','キョウト'=>'京都府','オオサカ'=>'大阪府','ヒョウゴ'=>'兵庫県','ナラ'=>'奈良県','ワカヤマ'=>'和歌山県','トットリ'=>'鳥取県','シマネ'=>'島根県','オカヤマ'=>'岡山県','ヒロシマ'=>'広島県','ヤマグチ'=>'山口県','トクシマ'=>'徳島県','カガワ'=>'香川県','エヒメ'=>'愛媛県','コウチ'=>'高知県','フクオカ'=>'福岡県','サガ'=>'佐賀県','ナガサキ'=>'長崎県','クマモト'=>'熊本県','オオイタ'=>'大分県','ミヤザキ'=>'宮崎県','カゴシマ'=>'鹿児島県','オキナワ'=>'沖縄県');

・[カタカナ]=>ローマ字

//「都府県」ナシ
$list = array('ホッカイドウ'=>'hokkaido','アオモリ'=>'aomori','イワテ'=>'iwate','ミヤギ'=>'miyagi','アキタ'=>'akita','ヤマガタ'=>'yamagata','フクシマ'=>'fukushima','イバラキ'=>'ibaraki','トチギ'=>'tochigi','グンマ'=>'gunma','サイタマ'=>'saitama','チバ'=>'chiba','トウキョウ'=>'tokyo','カナガワ'=>'kanagawa','ニイガタ'=>'niigata','ヤマナシ'=>'yamanashi','ナガノ'=>'nagano','トヤマ'=>'toyama','イシカワ'=>'ishikawa','フクイ'=>'fukui','ギフ'=>'gifu','シズオカ'=>'shizuoka','アイチ'=>'aichi','ミエ'=>'mie','シガ'=>'shiga','キョウト'=>'kyoto','オオサカ'=>'osaka','ヒョウゴ'=>'hyogo','ナラ'=>'nara','ワカヤマ'=>'wakayama','トットリ'=>'tottori','シマネ'=>'shimane','オカヤマ'=>'oakayama','ヒロシマ'=>'hiroshima','ヤマグチ'=>'yamaguchi','トクシマ'=>'tokushima','カガワ'=>'kagawa','エヒメ'=>'ehime','コウチ'=>'kochi','フクオカ'=>'fukuoka','サガ'=>'saga','ナガサキ'=>'nagasaki','クマモト'=>'kumamoto','オオイタ'=>'oita','ミヤザキ'=>'miyazaki','カゴシマ'=>'kagoshima','オキナワ'=>'okinawa');

▼キーが[漢字]

・[漢字]=>ひらがな

//「都府県」アリ
$list = array('北海道'=>'ほっかいどう','青森県'=>'あおもりけん','岩手県'=>'いわてけん','宮城県'=>'みやぎけん','秋田県'=>'あきたけん','山形県'=>'やまがたけん','福島県'=>'ふくしまけん','茨城県'=>'いばらきけん','栃木県'=>'とちぎけん','群馬県'=>'ぐんまけん','埼玉県'=>'さいたまけん','千葉県'=>'ちばけん','東京都'=>'とうきょうと','神奈川県'=>'かながわけん','新潟県'=>'にいがたけん','富山県'=>'とやまけん','石川県'=>'いしかわけん','福井県'=>'ふくいけん','山梨県'=>'やまなしけん','長野県'=>'ながのけん','岐阜県'=>'ぎふけん','静岡県'=>'しずおかけん','愛知県'=>'あいちけん','三重県'=>'みえけん','滋賀県'=>'しがけん','京都府'=>'きょうとふ','大阪府'=>'おおさかふ','兵庫県'=>'ひょうごけん','奈良県'=>'ならけん','和歌山県'=>'わかやまけん','鳥取県'=>'とっとりけん','島根県'=>'しまねけん','岡山県'=>'おかやまけん','広島県'=>'ひろしまけん','山口県'=>'やまぐちけん','徳島県'=>'とくしまけん','香川県'=>'かがわけん','愛媛県'=>'えひめけん','高知県'=>'こうちけん','福岡県'=>'ふくおかけん','佐賀県'=>'さがけん','長崎県'=>'ながさきけん','熊本県'=>'くまもとけん','大分県'=>'おおいたけん','宮崎県'=>'みやざきけん','鹿児島県'=>'かごしまけん','沖縄県'=>'おきなわけん');

//「都府県」ナシ
$list = array('北海道'=>'ほっかいどう','青森'=>'あおもり','岩手'=>'いわて','宮城'=>'みやぎ','秋田'=>'あきた','山形'=>'やまがた','福島'=>'ふくしま','茨城'=>'いばらき','栃木'=>'とちぎ','群馬'=>'ぐんま','埼玉'=>'さいたま','千葉'=>'ちば','東京'=>'とうきょう','神奈川'=>'かながわ','新潟'=>'にいがた','富山'=>'とやま','石川'=>'いしかわ','福井'=>'ふくい','山梨'=>'やまなし','長野'=>'ながの','岐阜'=>'ぎふ','静岡'=>'しずおか','愛知'=>'あいち','三重'=>'みえ','滋賀'=>'しが','京都'=>'きょうと','大阪'=>'おおさか','兵庫'=>'ひょうご','奈良'=>'なら','和歌山'=>'わかやま','鳥取'=>'とっとり','島根'=>'しまね','岡山'=>'おかやま','広島'=>'ひろしま','山口'=>'やまぐち','徳島'=>'とくしま','香川'=>'かがわ','愛媛'=>'えひめ','高知'=>'こうち','福岡'=>'ふくおか','佐賀'=>'さが','長崎'=>'ながさき','熊本'=>'くまもと','大分'=>'おおいた','宮崎'=>'みやざき','鹿児島'=>'かごしま','沖縄'=>'おきなわ');

・[漢字]=>ひらがな (不一致版)

//「都府県」(アリ→ナシ)
$list = array('北海道'=>'ほっかいどう','青森県'=>'あおもり','岩手県'=>'いわて','宮城県'=>'みやぎ','秋田県'=>'あきた','山形県'=>'やまがた','福島県'=>'ふくしま','茨城県'=>'いばらき','栃木県'=>'とちぎ','群馬県'=>'ぐんま','埼玉県'=>'さいたま','千葉県'=>'ちば','東京都'=>'とうきょう','神奈川県'=>'かながわ','新潟県'=>'にいがた','富山県'=>'とやま','石川県'=>'いしかわ','福井県'=>'ふくい','山梨県'=>'やまなし','長野県'=>'ながの','岐阜県'=>'ぎふ','静岡県'=>'しずおか','愛知県'=>'あいち','三重県'=>'みえ','滋賀県'=>'しが','京都府'=>'きょうと','大阪府'=>'おおさか','兵庫県'=>'ひょうご','奈良県'=>'なら','和歌山県'=>'わかやま','鳥取県'=>'とっとり','島根県'=>'しまね','岡山県'=>'おかやま','広島県'=>'ひろしま','山口県'=>'やまぐち','徳島県'=>'とくしま','香川県'=>'かがわ','愛媛県'=>'えひめ','高知県'=>'こうち','福岡県'=>'ふくおか','佐賀県'=>'さが','長崎県'=>'ながさき','熊本県'=>'くまもと','大分県'=>'おおいた','宮崎県'=>'みやざき','鹿児島県'=>'かごしま','沖縄県'=>'おきなわ');

//「都府県」(ナシ→アリ)
$list = array('北海道'=>'ほっかいどう','青森'=>'あおもりけん','岩手'=>'いわてけん','宮城'=>'みやぎけん','秋田'=>'あきたけん','山形'=>'やまがたけん','福島'=>'ふくしまけん','茨城'=>'いばらきけん','栃木'=>'とちぎけん','群馬'=>'ぐんまけん','埼玉'=>'さいたまけん','千葉'=>'ちばけん','東京'=>'とうきょうと','神奈川'=>'かながわけん','新潟'=>'にいがたけん','富山'=>'とやまけん','石川'=>'いしかわけん','福井'=>'ふくいけん','山梨'=>'やまなしけん','長野'=>'ながのけん','岐阜'=>'ぎふけん','静岡'=>'しずおかけん','愛知'=>'あいちけん','三重'=>'みえけん','滋賀'=>'しがけん','京都'=>'きょうとふ','大阪'=>'おおさかふ','兵庫'=>'ひょうごけん','奈良'=>'ならけん','和歌山'=>'わかやまけん','鳥取'=>'とっとりけん','島根'=>'しまねけん','岡山'=>'おかやまけん','広島'=>'ひろしまけん','山口'=>'やまぐちけん','徳島'=>'とくしまけん','香川'=>'かがわけん','愛媛'=>'えひめけん','高知'=>'こうちけん','福岡'=>'ふくおかけん','佐賀'=>'さがけん','長崎'=>'ながさきけん','熊本'=>'くまもとけん','大分'=>'おおいたけん','宮崎'=>'みやざきけん','鹿児島'=>'かごしまけん','沖縄'=>'おきなわけん');

・[漢字]=>カタカナ

//「都府県」アリ(漢字のみ)
$list = array('北海道'=>'ホッカイドウ','青森県'=>'アオモリ','岩手県'=>'イワテ','宮城県'=>'ミヤギ','秋田県'=>'アキタ','山形県'=>'ヤマガタ','福島県'=>'フクシマ','茨城県'=>'イバラキ','栃木県'=>'トチギ','群馬県'=>'グンマ','埼玉県'=>'サイタマ','千葉県'=>'チバ','東京都'=>'トウキョウ','神奈川県'=>'カナガワ','新潟県'=>'ニイガタ','富山県'=>'ヤマナシ','石川県'=>'ナガノ','福井県'=>'トヤマ','山梨県'=>'イシカワ','長野県'=>'フクイ','岐阜県'=>'ギフ','静岡県'=>'シズオカ','愛知県'=>'アイチ','三重県'=>'ミエ','滋賀県'=>'シガ','京都府'=>'キョウト','大阪府'=>'オオサカ','兵庫県'=>'ヒョウゴ','奈良県'=>'ナラ','和歌山県'=>'ワカヤマ','鳥取県'=>'トットリ','島根県'=>'シマネ','岡山県'=>'オカヤマ','広島県'=>'ヒロシマ','山口県'=>'ヤマグチ','徳島県'=>'トクシマ','香川県'=>'カガワ','愛媛県'=>'エヒメ','高知県'=>'コウチ','福岡県'=>'フクオカ','佐賀県'=>'サガ','長崎県'=>'ナガサキ','熊本県'=>'クマモト','大分県'=>'オオイタ','宮崎県'=>'ミヤザキ','鹿児島県'=>'カゴシマ','沖縄県'=>'オキナワ');

//「都府県」ナシ
$list = array('北海道'=>'ホッカイドウ','青森'=>'アオモリ','岩手'=>'イワテ','宮城'=>'ミヤギ','秋田'=>'アキタ','山形'=>'ヤマガタ','福島'=>'フクシマ','茨城'=>'イバラキ','栃木'=>'トチギ','群馬'=>'グンマ','埼玉'=>'サイタマ','千葉'=>'チバ','東京'=>'トウキョウ','神奈川'=>'カナガワ','新潟'=>'ニイガタ','富山'=>'ヤマナシ','石川'=>'ナガノ','福井'=>'トヤマ','山梨'=>'イシカワ','長野'=>'フクイ','岐阜'=>'ギフ','静岡'=>'シズオカ','愛知'=>'アイチ','三重'=>'ミエ','滋賀'=>'シガ','京都'=>'キョウト','大阪'=>'オオサカ','兵庫'=>'ヒョウゴ','奈良'=>'ナラ','和歌山'=>'ワカヤマ','鳥取'=>'トットリ','島根'=>'シマネ','岡山'=>'オカヤマ','広島'=>'ヒロシマ','山口'=>'ヤマグチ','徳島'=>'トクシマ','香川'=>'カガワ','愛媛'=>'エヒメ','高知'=>'コウチ','福岡'=>'フクオカ','佐賀'=>'サガ','長崎'=>'ナガサキ','熊本'=>'クマモト','大分'=>'オオイタ','宮崎'=>'ミヤザキ','鹿児島'=>'カゴシマ','沖縄'=>'オキナワ');

・[漢字]=>漢字

//「都府県」アリからナシ
$list = array('北海道'=>'北海道','青森県'=>'青森','岩手県'=>'岩手','宮城県'=>'宮城','秋田県'=>'秋田','山形県'=>'山形','福島県'=>'福島','茨城県'=>'茨城','栃木県'=>'栃木','群馬県'=>'群馬','埼玉県'=>'埼玉','千葉県'=>'千葉','東京都'=>'東京','神奈川県'=>'神奈川','新潟県'=>'新潟','富山県'=>'富山','石川県'=>'石川','福井県'=>'福井','山梨県'=>'山梨','長野県'=>'長野','岐阜県'=>'岐阜','静岡県'=>'静岡','愛知県'=>'愛知','三重県'=>'三重','滋賀県'=>'滋賀','京都府'=>'京都','大阪府'=>'大阪','兵庫県'=>'兵庫','奈良県'=>'奈良','和歌山県'=>'和歌山','鳥取県'=>'鳥取','島根県'=>'島根','岡山県'=>'岡山','広島県'=>'広島','山口県'=>'山口','徳島県'=>'徳島','香川県'=>'香川','愛媛県'=>'愛媛','高知県'=>'高知','福岡県'=>'福岡','佐賀県'=>'佐賀','長崎県'=>'長崎','熊本県'=>'熊本','大分県'=>'大分','宮崎県'=>'宮崎','鹿児島県'=>'鹿児島','沖縄県'=>'沖縄');

//「都府県」ナシからアリ
$list = array('北海道'=>'北海道','青森'=>'青森県','岩手'=>'岩手県','宮城'=>'宮城県','秋田'=>'秋田県','山形'=>'山形県','福島'=>'福島県','茨城'=>'茨城県','栃木'=>'栃木県','群馬'=>'群馬県','埼玉'=>'埼玉県','千葉'=>'千葉県','東京'=>'東京都','神奈川'=>'神奈川県','新潟'=>'新潟県','富山'=>'富山県','石川'=>'石川県','福井'=>'福井県','山梨'=>'山梨県','長野'=>'長野県','岐阜'=>'岐阜県','静岡'=>'静岡県','愛知'=>'愛知県','三重'=>'三重県','滋賀'=>'滋賀県','京都'=>'京都府','大阪'=>'大阪府','兵庫'=>'兵庫県','奈良'=>'奈良県','和歌山'=>'和歌山県','鳥取'=>'鳥取県','島根'=>'島根県','岡山'=>'岡山県','広島'=>'広島県','山口'=>'山口県','徳島'=>'徳島県','香川'=>'香川県','愛媛'=>'愛媛県','高知'=>'高知県','福岡'=>'福岡県','佐賀'=>'佐賀県','長崎'=>'長崎県','熊本'=>'熊本県','大分'=>'大分県','宮崎'=>'宮崎県','鹿児島'=>'鹿児島県','沖縄'=>'沖縄県');

・[漢字]=>ローマ字

//「都府県」アリ(漢字のみ)
$list = array('北海道'=>'hokkaido','青森県'=>'aomori','岩手県'=>'iwate','宮城県'=>'miyagi','秋田県'=>'akita','山形県'=>'yamagata','福島県'=>'fukushima','茨城県'=>'ibaraki','栃木県'=>'tochigi','群馬県'=>'gunma','埼玉県'=>'saitama','千葉県'=>'chiba','東京都'=>'tokyo','神奈川県'=>'kanagawa','新潟県'=>'niigata','富山県'=>'yamanashi','石川県'=>'nagano','福井県'=>'toyama','山梨県'=>'ishikawa','長野県'=>'fukui','岐阜県'=>'gifu','静岡県'=>'shizuoka','愛知県'=>'aichi','三重県'=>'mie','滋賀県'=>'shiga','京都府'=>'kyoto','大阪府'=>'osaka','兵庫県'=>'hyogo','奈良県'=>'nara','和歌山県'=>'wakayama','鳥取県'=>'tottori','島根県'=>'shimane','岡山県'=>'oakayama','広島県'=>'hiroshima','山口県'=>'yamaguchi','徳島県'=>'tokushima','香川県'=>'kagawa','愛媛県'=>'ehime','高知県'=>'kochi','福岡県'=>'fukuoka','佐賀県'=>'saga','長崎県'=>'nagasaki','熊本県'=>'kumamoto','大分県'=>'oita','宮崎県'=>'miyazaki','鹿児島県'=>'kagoshima','沖縄県'=>'okinawa');

//「都府県」ナシ
$list = array('北海道'=>'hokkaido','青森'=>'aomori','岩手'=>'iwate','宮城'=>'miyagi','秋田'=>'akita','山形'=>'yamagata','福島'=>'fukushima','茨城'=>'ibaraki','栃木'=>'tochigi','群馬'=>'gunma','埼玉'=>'saitama','千葉'=>'chiba','東京'=>'tokyo','神奈川'=>'kanagawa','新潟'=>'niigata','富山'=>'yamanashi','石川'=>'nagano','福井'=>'toyama','山梨'=>'ishikawa','長野'=>'fukui','岐阜'=>'gifu','静岡'=>'shizuoka','愛知'=>'aichi','三重'=>'mie','滋賀'=>'shiga','京都'=>'kyoto','大阪'=>'osaka','兵庫'=>'hyogo','奈良'=>'nara','和歌山'=>'wakayama','鳥取'=>'tottori','島根'=>'shimane','岡山'=>'oakayama','広島'=>'hiroshima','山口'=>'yamaguchi','徳島'=>'tokushima','香川'=>'kagawa','愛媛'=>'ehime','高知'=>'kochi','福岡'=>'fukuoka','佐賀'=>'saga','長崎'=>'nagasaki','熊本'=>'kumamoto','大分'=>'oita','宮崎'=>'miyazaki','鹿児島'=>'kagoshima','沖縄'=>'okinawa');

▼キーが[ローマ字]

・[ローマ字]=>ひらがな

//「都府県」アリ(ひらがなのみ)
$list = array('hokkaido'=>'ほっかいどう','aomori'=>'あおもりけん','iwate'=>'いわてけん','miyagi'=>'みやぎけん','akita'=>'あきたけん','yamagata'=>'やまがたけん','fukushima'=>'ふくしまけん','ibaraki'=>'いばらきけん','tochigi'=>'とちぎけん','gunma'=>'ぐんまけん','saitama'=>'さいたまけん','chiba'=>'ちばけん','tokyo'=>'とうきょうと','kanagawa'=>'かながわけん','niigata'=>'にいがたけん','yamanashi'=>'とやまけん','nagano'=>'いしかわけん','toyama'=>'ふくいけん','ishikawa'=>'やまなしけん','fukui'=>'ながのけん','gifu'=>'ぎふけん','shizuoka'=>'しずおかけん','aichi'=>'あいちけん','mie'=>'みえけん','shiga'=>'しがけん','kyoto'=>'きょうとふ','osaka'=>'おおさかふ','hyogo'=>'ひょうごけん','nara'=>'ならけん','wakayama'=>'わかやまけん','tottori'=>'とっとりけん','shimane'=>'しまねけん','oakayama'=>'おかやまけん','hiroshima'=>'ひろしまけん','yamaguchi'=>'やまぐちけん','tokushima'=>'とくしまけん','kagawa'=>'かがわけん','ehime'=>'えひめけん','kochi'=>'こうちけん','fukuoka'=>'ふくおかけん','saga'=>'さがけん','nagasaki'=>'ながさきけん','kumamoto'=>'くまもとけん','oita'=>'おおいたけん','miyazaki'=>'みやざきけん','kagoshima'=>'かごしまけん','okinawa'=>'おきなわけん');

//「都府県」ナシ
$list = array('hokkaido'=>'ほっかいどう','aomori'=>'あおもり','iwate'=>'いわて','miyagi'=>'みやぎ','akita'=>'あきた','yamagata'=>'やまがた','fukushima'=>'ふくしま','ibaraki'=>'いばらき','tochigi'=>'とちぎ','gunma'=>'ぐんま','saitama'=>'さいたま','chiba'=>'ちば','tokyo'=>'とうきょう','kanagawa'=>'かながわ','niigata'=>'にいがた','yamanashi'=>'とやま','nagano'=>'いしかわ','toyama'=>'ふくい','ishikawa'=>'やまなし','fukui'=>'ながの','gifu'=>'ぎふ','shizuoka'=>'しずおか','aichi'=>'あいち','mie'=>'みえ','shiga'=>'しが','kyoto'=>'きょうと','osaka'=>'おおさか','hyogo'=>'ひょうご','nara'=>'なら','wakayama'=>'わかやま','tottori'=>'とっとり','shimane'=>'しまね','oakayama'=>'おかやま','hiroshima'=>'ひろしま','yamaguchi'=>'やまぐち','tokushima'=>'とくしま','kagawa'=>'かがわ','ehime'=>'えひめ','kochi'=>'こうち','fukuoka'=>'ふくおか','saga'=>'さが','nagasaki'=>'ながさき','kumamoto'=>'くまもと','oita'=>'おおいた','miyazaki'=>'みやざき','kagoshima'=>'かごしま','okinawa'=>'おきなわ');

・[ローマ字]=>カタカナ

//「都府県」ナシ
$list = array('hokkaido'=>'ホッカイドウ','aomori'=>'アオモリ','iwate'=>'イワテ','miyagi'=>'ミヤギ','akita'=>'アキタ','yamagata'=>'ヤマガタ','fukushima'=>'フクシマ','ibaraki'=>'イバラキ','tochigi'=>'トチギ','gunma'=>'グンマ','saitama'=>'サイタマ','chiba'=>'チバ','tokyo'=>'トウキョウ','kanagawa'=>'カナガワ','niigata'=>'ニイガタ','yamanashi'=>'ヤマナシ','nagano'=>'ナガノ','toyama'=>'トヤマ','ishikawa'=>'イシカワ','fukui'=>'フクイ','gifu'=>'ギフ','shizuoka'=>'シズオカ','aichi'=>'アイチ','mie'=>'ミエ','shiga'=>'シガ','kyoto'=>'キョウト','osaka'=>'オオサカ','hyogo'=>'ヒョウゴ','nara'=>'ナラ','wakayama'=>'ワカヤマ','tottori'=>'トットリ','shimane'=>'シマネ','oakayama'=>'オカヤマ','hiroshima'=>'ヒロシマ','yamaguchi'=>'ヤマグチ','tokushima'=>'トクシマ','kagawa'=>'カガワ','ehime'=>'エヒメ','kochi'=>'コウチ','fukuoka'=>'フクオカ','saga'=>'サガ','nagasaki'=>'ナガサキ','kumamoto'=>'クマモト','oita'=>'オオイタ','miyazaki'=>'ミヤザキ','kagoshima'=>'カゴシマ','okinawa'=>'オキナワ');

・[ローマ字]=>漢字(★よく使う)

//「都府県」アリ(漢字のみ)
$list = array('hokkaido'=>'北海道','aomori'=>'青森県','iwate'=>'岩手県','miyagi'=>'宮城県','akita'=>'秋田県','yamagata'=>'山形県','fukushima'=>'福島県','ibaraki'=>'茨城県','tochigi'=>'栃木県','gunma'=>'群馬県','saitama'=>'埼玉県','chiba'=>'千葉県','tokyo'=>'東京都','kanagawa'=>'神奈川県','niigata'=>'新潟県','yamanashi'=>'富山県','nagano'=>'石川県','toyama'=>'福井県','ishikawa'=>'山梨県','fukui'=>'長野県','gifu'=>'岐阜県','shizuoka'=>'静岡県','aichi'=>'愛知県','mie'=>'三重県','shiga'=>'滋賀県','kyoto'=>'京都府','osaka'=>'大阪府','hyogo'=>'兵庫県','nara'=>'奈良県','wakayama'=>'和歌山県','tottori'=>'鳥取県','shimane'=>'島根県','oakayama'=>'岡山県','hiroshima'=>'広島県','yamaguchi'=>'山口県','tokushima'=>'徳島県','kagawa'=>'香川県','ehime'=>'愛媛県','kochi'=>'高知県','fukuoka'=>'福岡県','saga'=>'佐賀県','nagasaki'=>'長崎県','kumamoto'=>'熊本県','oita'=>'大分県','miyazaki'=>'宮崎県','kagoshima'=>'鹿児島県','okinawa'=>'沖縄県');

//「都府県」ナシ
$list = array('hokkaido'=>'北海道','aomori'=>'青森','iwate'=>'岩手','miyagi'=>'宮城','akita'=>'秋田','yamagata'=>'山形','fukushima'=>'福島','ibaraki'=>'茨城','tochigi'=>'栃木','gunma'=>'群馬','saitama'=>'埼玉','chiba'=>'千葉','tokyo'=>'東京','kanagawa'=>'神奈川','niigata'=>'新潟','yamanashi'=>'富山','nagano'=>'石川','toyama'=>'福井','ishikawa'=>'山梨','fukui'=>'長野','gifu'=>'岐阜','shizuoka'=>'静岡','aichi'=>'愛知','mie'=>'三重','shiga'=>'滋賀','kyoto'=>'京都','osaka'=>'大阪','hyogo'=>'兵庫','nara'=>'奈良','wakayama'=>'和歌山','tottori'=>'鳥取','shimane'=>'島根','oakayama'=>'岡山','hiroshima'=>'広島','yamaguchi'=>'山口','tokushima'=>'徳島','kagawa'=>'香川','ehime'=>'愛媛','kochi'=>'高知','fukuoka'=>'福岡','saga'=>'佐賀','nagasaki'=>'長崎','kumamoto'=>'熊本','oita'=>'大分','miyazaki'=>'宮崎','kagoshima'=>'鹿児島','okinawa'=>'沖縄');

3次元配列(よく使うもののみ)

エリア漢字(ローマ字=>漢字)

//「都府県」アリ
$list = array(
'北海道' => array('hokkaido'=>'北海道'),
'東北' => array('aomori'=>'青森県','iwate'=>'岩手県','miyagi'=>'宮城県','akita'=>'秋田県','yamagata'=>'山形県','fukushima'=>'福島県'),
'関東' => array('ibaraki'=>'茨城県','tochigi'=>'栃木県','gunma'=>'群馬県','saitama'=>'埼玉県','chiba'=>'千葉県','tokyo'=>'東京都','kanagawa'=>'神奈川県'),
'中部' => array('niigata'=>'新潟県','yamanashi'=>'富山県','nagano'=>'石川県','toyama'=>'福井県','ishikawa'=>'山梨県','fukui'=>'長野県','gifu'=>'岐阜県','shizuoka'=>'静岡県','aichi'=>'愛知県'),
'近畿' => array('mie'=>'三重県','shiga'=>'滋賀県','kyoto'=>'京都府','osaka'=>'大阪府','hyogo'=>'兵庫県','nara'=>'奈良県','wakayama'=>'和歌山県'),
'中国' => array('tottori'=>'鳥取県','shimane'=>'島根県','oakayama'=>'岡山県','hiroshima'=>'広島県','yamaguchi'=>'山口県'),
'四国' => array('tokushima'=>'徳島県','kagawa'=>'香川県','ehime'=>'愛媛県','kochi'=>'高知県'),
'九州沖縄' => array('fukuoka'=>'福岡県','saga'=>'佐賀県','nagasaki'=>'長崎県','kumamoto'=>'熊本県','oita'=>'大分県','miyazaki'=>'宮崎県','kagoshima'=>'鹿児島県','okinawa'=>'沖縄県')
);

//「都府県」ナシ
$list = array(
'北海道' => array('hokkaido'=>'北海道'),
'東北' => array('aomori'=>'青森','iwate'=>'岩手','miyagi'=>'宮城','akita'=>'秋田','yamagata'=>'山形','fukushima'=>'福島'),
'関東' => array('ibaraki'=>'茨城','tochigi'=>'栃木','gunma'=>'群馬','saitama'=>'埼玉','chiba'=>'千葉','tokyo'=>'東京','kanagawa'=>'神奈川'),
'中部' => array('niigata'=>'新潟','yamanashi'=>'富山','nagano'=>'石川','toyama'=>'福井','ishikawa'=>'山梨','fukui'=>'長野','gifu'=>'岐阜','shizuoka'=>'静岡','aichi'=>'愛知'),
'近畿' => array('mie'=>'三重','shiga'=>'滋賀','kyoto'=>'京都','osaka'=>'大阪','hyogo'=>'兵庫','nara'=>'奈良','wakayama'=>'和歌山'),
'中国' => array('tottori'=>'鳥取','shimane'=>'島根','oakayama'=>'岡山','hiroshima'=>'広島','yamaguchi'=>'山口'),
'四国' => array('tokushima'=>'徳島','kagawa'=>'香川','ehime'=>'愛媛','kochi'=>'高知'),
'九州沖縄' => array('fukuoka'=>'福岡','saga'=>'佐賀','nagasaki'=>'長崎','kumamoto'=>'熊本','oita'=>'大分','miyazaki'=>'宮崎','kagoshima'=>'鹿児島','okinawa'=>'沖縄')
);

エリアローマ字(ローマ字=>漢字)

//「都府県」アリ
$list = array(
'hokkaido' => array('hokkaido'=>'北海道'),
'tohoku' => array('aomori'=>'青森県','iwate'=>'岩手県','miyagi'=>'宮城県','akita'=>'秋田県','yamagata'=>'山形県','fukushima'=>'福島県'),
'kanto' => array('ibaraki'=>'茨城県','tochigi'=>'栃木県','gunma'=>'群馬県','saitama'=>'埼玉県','chiba'=>'千葉県','tokyo'=>'東京都','kanagawa'=>'神奈川県'),
'chubu' => array('niigata'=>'新潟県','yamanashi'=>'富山県','nagano'=>'石川県','toyama'=>'福井県','ishikawa'=>'山梨県','fukui'=>'長野県','gifu'=>'岐阜県','shizuoka'=>'静岡県','aichi'=>'愛知県'),
'kinki' => array('mie'=>'三重県','shiga'=>'滋賀県','kyoto'=>'京都府','osaka'=>'大阪府','hyogo'=>'兵庫県','nara'=>'奈良県','wakayama'=>'和歌山県'),
'chugoku' => array('tottori'=>'鳥取県','shimane'=>'島根県','oakayama'=>'岡山県','hiroshima'=>'広島県','yamaguchi'=>'山口県'),
'shikoku' => array('tokushima'=>'徳島県','kagawa'=>'香川県','ehime'=>'愛媛県','kochi'=>'高知県'),
'kyushuokinawa' => array('fukuoka'=>'福岡県','saga'=>'佐賀県','nagasaki'=>'長崎県','kumamoto'=>'熊本県','oita'=>'大分県','miyazaki'=>'宮崎県','kagoshima'=>'鹿児島県','okinawa'=>'沖縄県')
);

//「都府県」ナシ
$list = array(
'hokkaido' => array('hokkaido'=>'北海道'),
'tohoku' => array('aomori'=>'青森','iwate'=>'岩手','miyagi'=>'宮城','akita'=>'秋田','yamagata'=>'山形','fukushima'=>'福島'),
'kanto' => array('ibaraki'=>'茨城','tochigi'=>'栃木','gunma'=>'群馬','saitama'=>'埼玉','chiba'=>'千葉','tokyo'=>'東京','kanagawa'=>'神奈川'),
'chubu' => array('niigata'=>'新潟','yamanashi'=>'富山','nagano'=>'石川','toyama'=>'福井','ishikawa'=>'山梨','fukui'=>'長野','gifu'=>'岐阜','shizuoka'=>'静岡','aichi'=>'愛知'),
'kinki' => array('mie'=>'三重','shiga'=>'滋賀','kyoto'=>'京都','osaka'=>'大阪','hyogo'=>'兵庫','nara'=>'奈良','wakayama'=>'和歌山'),
'chugoku' => array('tottori'=>'鳥取','shimane'=>'島根','oakayama'=>'岡山','hiroshima'=>'広島','yamaguchi'=>'山口'),
'shikoku' => array('tokushima'=>'徳島','kagawa'=>'香川','ehime'=>'愛媛','kochi'=>'高知'),
'kyushuokinawa' => array('fukuoka'=>'福岡','saga'=>'佐賀','nagasaki'=>'長崎','kumamoto'=>'熊本','oita'=>'大分','miyazaki'=>'宮崎','kagoshima'=>'鹿児島','okinawa'=>'沖縄')
);

4次元配列(使わない。ネタ。)

$list = array(
    'japan' => array(
        'hokkaido' => array('hokkaido'=>'北海道'),
        'tohoku' => array('aomori'=>'青森県','iwate'=>'岩手県','miyagi'=>'宮城県','akita'=>'秋田県','yamagata'=>'山形県','fukushima'=>'福島県')
        ・・・・・・
        ・・・・・・
        ・・・・・・
    ),
    'america' => array(
        'arkansas' => array('fayetteville'=>'フェイエットビル','Jonesboro'=>'ジョーンズボロ'・・・・・・),
        'iowa' => array('aomori'=>'ダベンポート',・・・・・・),
        ・・・・・・
        ・・・・・・
        ・・・・・・
    );
);

最後に

配列を複雑にしすぎても管理や操作が大変なのでほどほどにしておきましょう。

ここには載っていない「こんな配列がほしかった!」というご意見お待ちしております。
あなたが欲しいと思った配列は、いつか他の誰かが必要になるかもしれませんので、ここに掲載させていただきます!

ご連絡お待ちしております。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

複数のLaravelアプリを任意のデータベースに接続する方法

はじめに

Laravelでの開発で、最初のサンプルアプリはつくってみた。
次は本格的にアプリケーションを作ってみたいけど
最初に使ったDBとは別のDBに接続してテーブル作りたい。
そんな時に試行錯誤した設定方法を備忘録として残します。
誰かの参考になれば幸いです。

*1〜3の手順は初めてLaravelを使用する際にも通る工程です。

開発環境
MAC
VirtualBox
Homestead
vagrant 2.2.9
PHP 7.3.11
Laravel 5.5.48

1.Laravelのダウンロード

composerで新規のLaravelをインストールしていきます。
ターミナルを開いてHomesteadが置いてあるディレクトリまで移動します。
移動したら以下を打ち込んでください。
composer create-project laravel/laravel Laravel_new
Laravel_newの部分はファイル名にあたります。任意のプロジェクトファイル名に変更してください。
ディレクトリ構造は
Laravel
 |- Homestead
 |- Laravel_sample
 |- Laravel_new
となります。

2.Homestead.yamlを編集する

~~省略
folders:
//↓最初に設定したパス
    - map: /Users/ユーザー名/Laravel 
      to: /home/vagrant/code

//↓追加するパス 同じディレクトリなので設定する必要ないかもしれませんが一応いれておきます
    - map: /Users/ユーザー名/Laravel
      to: /home/vagrant/code

sites:
//↓最初に設定したパス
    - map: laravel.sample
      to: /home/vagrant/code/laravel_sample/public

//↓追加するパス
    - map: laravel.new //ドメイン名になる。基本なんでもOKだけど全部小文字で!
      to: /home/vagrant/code/laravel_new/public



databases:
    - homestead
    //↓使用したいデータベース名を設定します。これも何でもOK。2つ目のLaravelアプリで使用するテーブルがこのデータベースに入ります。
    - laraveldb
~~省略

2.hostsファイルにドメインを追加

hostsファイルは自身のPCに最初から入っているファイルです。
「hosts」で検索するとectというフォルダの中に入ってると思います。
先ほどのHomestead.yamlに追加したドメイン名と同じものを、このhostsファイルにも追記します。
必ず半角スペースをあけて追記しましょう。

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10 laravel.sample laravel.new ←これ

注意点として、このhostsファイルはPC上の大事なファイルなので変更できないようになっています。
一度、デスクトップなどに移動させてから変更し、終わったら元の場所に戻すというやり方で変更できます。

3.envファイルの設定

.envファイルに、今回のlaravel.newで使用するMySQLのデータベースにアクセスできるよう、設定を追加します。

~省略~
↓もともとあったもの
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=***

↓laravel.newのために追加するもの
DB_CONNECTION_NEW=laravelnew
DB_HOST_NEW=127.0.0.1
DB_PORT_NEW=3306
DB_DATABASE_NEW=laraveldb
DB_USERNAME_NEW=root
DB_PASSWORD_NEW=***

~省略~

末尾に追加した_NEWは区別するために加えたものです。
DB_DATABASE_NEWHomestead.yamldatabases:で設定した名前の通り指定します。
usernameとpasswordは自身のものを指定してください。今回は*で伏せています。

4.database.phpの設定

Laravelのセットに入っているdatabase.phpに設定を追記します。
configフォルダに入っています。

 'laravelnew' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_NEW', '127.0.0.1'),
            'port' => env('DB_PORT_NEW', '3306'),
            'database' => env('DB_DATABASE_NEW', 'laraveldb'),
            'username' => env('DB_USERNAME_NEW', 'root'),
            'password' => env('DB_PASSWORD_NEW', '***'),
            'unix_socket' => env('DB_SOCKET_NEW', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

変更箇所のみ抜粋しています。
追記が終わったら、一番上のdefaultも変更しておきましょう。
laravelnewとは、前工程で編集したenvファイルのDB_CONNECTION_NEWに設定したものです。

'default' => env('DB_CONNECTION_NEW', 'laravelnew'),

DB_CONNECTION名は、「この設定で指定した通りのものを使います!」という合言葉のようなもの(と認識しております。)です。違ったらご指摘いただけると幸いです…。
例えば、この先シーディングファイルにテーブルの初期値を入れることになるかと思いますが、その時に
DB::connection('laravelnew')->table('users')->insert([...])とすると、database.phpに追記したデータベースに入れてくれます。
(defaultに設定しておけばこの手順は省けるはずなんですが、なぜか私の場合は使いたいデータベースに接続できず、最初に使用していたデータベースにシーディングされてしまいました…)

5.設定の反映

ここまでできたら、今までの設定を反映させます。
database.phpなどの設定ファイルをいじった後は仮想OSを再起動しないと反映されません!
vagrant reload --provisionをターミナルに打ち込んでください。

6.最終確認

これで設定は完了したはずですが、このまますぐにmaigrateしたりseedするのはちょっと怖いので
本当に設定できているか確認しましょう。
tinkerを使います。
vagrant sshでssh接続します。
cdで自身のプロジェクトファイルまで潜って(今回はlaravel_new)
php artisan tinkerと叩きます。
以下は実行した処理内容です。

vagrant@homestead:~/code/laravel_new $ php artisan tinker
Psy Shell v0.9.12 (PHP 7.4.5 — cli) by Justin Hileman
>>> config('database.default')
=> "laravelnew"
>>> config('database.connections.laravelnew')
=> [
     "driver" => "mysql",
     "host" => "127.0.0.1",
     "port" => "3306",
     "database" => "laraveldb",
     "username" => "root",
     "password" => "***",
     "unix_socket" => "",
     "charset" => "utf8mb4",
     "collation" => "utf8mb4_unicode_ci",
     "prefix" => "",
     "strict" => true,
     "engine" => null,
   ]
>>> 

config('database.default')でdatabase.phpでデフォルトに設定したコネクション名がでてきます。
次に、config('database.connections.laravelnew')で、database.phpに設定した内容が走ります。

これで先ほど設定した内容がうまいこといってることが確認できました!
安心してマイグレーション、シーディングができますね。

ちなみに実際にマイグレーションするときに
php artisan migrate --database=laravelnew
とすると確実にlaravelnewで使用したいデータベースに接続できるはずです。心配な方はやってみるといいと思います!


以上で任意のデータベースに接続する方法は終了です。
次回はできあがったアプリをHerokuにデプロイするまでの工程を記事にしたいと思います!

この記事の内容に、間違っている点、もっとこうした方がいいという点などありましたらコメントいただけると幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでWordpressのローカル環境構築&開発手順

Wordpressのローカル環境を構築したい時の選択肢

・MAMP
・XAMMP
・Local by flywheel
・Docker
おそらく一番簡単なのは3つめのLocal by flywheelだと思います。
私の場合は前者3つが手持ちのPC(MacOS13)で使えなかったので、Dockerでできる方法を調べました。

Dockerによるローカル環境を構築

(参考: 初心者|Docker-ComposeでWordPressとMySQLとphpMyAdminのローカル環境の構築 )
Dockerとは...??って感じの人はかめさんのDocker超入門①〜Dockerってなに?〜【初心者向け】でまず勉強するといいと思います。

プロジェクトファイルの中にymlファイルを作成

terminal.
$ touch docker-compose.yml

ymlファイルに以下をコピペ

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7
    #container_name: "mysql57"
    volumes:
      - ./db/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: user
      MYSQL_PASSWORD: user_pass_Ck6uTvrQ

  wordpress:
    image: wordpress:latest
    #container_name: "wordpress"
    volumes:
      - ./wordpress/html:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
    restart: always
    depends_on:
      - db
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: user_pass_Ck6uTvrQ

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    #container_name: "phpmyadmin"
    restart: always
    depends_on:
      - db
    ports:
      - 8888:80

docker-composeをアップ

terminal.
$ docker-compose up -d

http://localhost:8080/ にアクセスしてみて、wordpressの管理画面が表示されてればok。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでWordpress

Wordpressのローカル環境を構築したい時の選択肢

・MAMP
・XAMMP
・Local by flywheel
・Docker
おそらく一番簡単なのは3つめのLocal by flywheelだと思います。
私の場合は前者3つが手持ちのPC(MacOS13)で使えなかったので、Dockerでできる方法を調べました。

Dockerによるローカル環境を構築

(参考: 初心者|Docker-ComposeでWordPressとMySQLとphpMyAdminのローカル環境の構築 )
Dockerとは...??って感じの人はかめさんのDocker超入門①〜Dockerってなに?〜【初心者向け】でまず勉強するといいと思います。

プロジェクトファイルの中にymlファイルを作成

terminal.
$ touch docker-compose.yml

ymlファイルに以下をコピペ

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7
    #container_name: "mysql57"
    volumes:
      - ./db/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: user
      MYSQL_PASSWORD: user_pass_Ck6uTvrQ

  wordpress:
    image: wordpress:latest
    #container_name: "wordpress"
    volumes:
      - ./wordpress/html:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
    restart: always
    depends_on:
      - db
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: user_pass_Ck6uTvrQ

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    #container_name: "phpmyadmin"
    restart: always
    depends_on:
      - db
    ports:
      - 8888:80

docker-composeをアップ

terminal.
$ docker-compose up -d

http://localhost:8080/ にアクセスしてみて、wordpressの管理画面が表示されてればok。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WEBサーバとDBサーバを使用してwordpressを構築

目的

wordpress構築手順とは別のサーバ構成を用いた構築手順になります。
どういうことかというと、
wordpress構築手順では、一台のインスタンスにWEBサーバーとDBサーバーの役割をまとめました。
今回の記事では、VMインスタンスを2台用意する。
一つ目のVMインスタンスにWEBサーバーを、二つ目のVMインスタンスにDBサーバーの機能を持たせ、
分離した構成とします。

手順要旨

・WEBサーバーは、wordpress構築手順で作成したVMインスタンスを活用し、
 手を加える。
・新たにインスタンスを一台作成し、DBサーバーの機能を持たせる。
・WEBサーバーからDBサーバーへの接続確認

構築手順

WEBサーバ用VMインスタンスに手を加える

Wordpress 設定ファイル修正
wp-config.phpを作成して編集
#cd /var/www/html/wordpress
#mv wp-config-sample.php wp-config.php
#vi wp-config.php

下記項目を変更 特に'DB_NAME'と'DB_USER'はDB用VMインスタンスで作成するDBと名称一致させること
define('DB_NAME', 'wordpressstep2');
define('DB_USER', 'wordpressstep2');
define('DB_PASSWORD', 'kamisama123');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

DB用に新規でVMインスタンス作成

インスタンス詳細設定内容は下記参照
[wordpress構築手順](https://itexpert.tips/ja/wordpress-ja/ubuntu-linux%e3%81%abnginx%e3%81%a7wordpress%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/#3)のVMインスタンス作成を参照

MySQL インストール/データベース作成

#apt-get update
#apt-get install mysql-server mysql-client
#mysql --version

MySQLサービスコンソールにアクセス
#mysql -u root -p

データベース作成
下記情報で作成(wordpressは自由に変更してください)
•wordpressstep2という名前のデータベースを作成します。
•wordpressstep2という名前のMySQLユーザーアカウントを作成します。
•ワードプレスデータベースをワードプレスのユーザに完全に制御する。

↑をもとに下記コマンド実行
mysql> CREATE DATABASE wordpressstep2 CHARACTER SET UTF8 COLLATE UTF8_BIN;
mysql> CREATE USER 'wordpressstep2'@'%' IDENTIFIED BY 'kamisama123';
mysql> GRANT ALL PRIVILEGES ON wordpressstep2.* TO 'wordpressstep2'@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit;

外部のホストからDB用VMインスタンスに接続するための確認事項

確認事項①
作業インスタンス:DB用VMインスタンス
下記コマンドを実行
mysql> select user, host from mysql.user;
実行結果
mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| wordpressstep2   | %         |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> quit

ここで確認したいことは、user:wordpresstep2 host:% の行です。
これは、wordpresstep2ユーザならどのホストからでも接続できるということです。

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できない。ガーン
確認事項②
DBサーバ用インスタンスの設定ファイルで他のアドレスからのアクセスを許可することができる。

MySQL サーバの設定ファイルより bind-address をコメントアウトして接続できる IP アドレスの制限をはずす。
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
 下記行をコメントアウトする
bind-address = 127.0.0.1
下記行を追加
bind-address = 0.0.0.0

変更したら mysql サーバーを再起動しよう。
$ sudo service mysql restart
sudo service mysqld status


WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
結果だめ
確認事項③
DBサーバのfirewallにポート(3306)の追加し、ポート3306で他のホストからのアクセスを許可

#apt install firewalld
#firewall-cmd --list-ports
実行結果何も登録されていない

ポート(3306)の追加
#firewall-cmd --add-port=3306/tcp --zone=public
#firewall-cmd --list-ports

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できない
確認事項④
db-wordpressでfirewallにmysqlを使えるように設定する。
状態チェック
firewall-cmd --list-services --zone=public  --permanent
実行結果
dhcpv6-client ssh

mysqlが無いので、追加
# firewall-cmd --add-service=mysql --zone=public --permanent
実行結果
success

リロード
#firewall-cmd --reload

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できたーー

Wordpressに接続

ブラウザを開き、下記URLに接続
http://(WEBサーバVMインスタンス外部IPアドレス)/wordpress
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

配列の中のnullの要素を排除する方法

<?php

function valuecomp($var){
    // null以外の値を返す
    return($var <> null);
}

$value_array = [100, 200, null, 400, null];

//array_filterを使用してコールバック関数に配列を渡す
$value = array_filter($value_array, 'valuecomp');

var_dump($value);

?>

実行結果
array(3) { [0]=> int(100) [1]=> int(200) [3]=> int(400) }
//配列の番号を詰める場合は、これ

array_values($value);
var_dump($value);

実行結果
array(3) { [0]=> int(100) [1]=> int(200) [2]=> int(400) }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

memory_limitをmacで編集する方法【エラー:Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52】

ある日にcomposer requireすると、エラーが表示

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.% 

memoryがいっぱい?
macの容量、メモリ共に空いていますけど??

調べてみると、

php.iniに記載されている、memory_limitが上限に達したようだ。
デフォルトだと128MBが設定されているので、それを更新させる必要がある。

php.iniを作成

macにはphp.ini.defaultというファイルが存在し、これをコピーで複製して、設定を変えて改善させます。

ファイルの場所は/private/etc/php.ini.defaultです。
コマンドで確認したい場合は、

php -i | grep php.ini 

で確認できます。

なので、これをコピーしてphp.iniを作成しましょう。

sudo cp -p /etc/php.ini.default /etc/php.ini

でphp.iniを作成します。

容量の変更

現在のメモリーを確認するコマンドを実行しましょう。

コマンド
$ php -i | grep memory_limit
memory_limit => 128M => 128M 

128Mと分かります。
これを変更したいので、

vim /etc/php.ini

memory_limitを見つけて変更します

容量の上限を上げる
memory_limit = 528M
容量を無制限にする
memory_limit = -1

保存時にエラーが発生する

[vim]read only

と表示されて、:wqで保存できません。

そこで、

:w !sudo tee %を手入力して実行

画面に変化が現れますので、さらに

vim画面から脱するために

:q!で終了します。

確認

$ php -i | grep memory_limit
memory_limit => -1 => -1

これで反映されたことが分かります。

改めてcomposerを実行すると、

Package manifest generated successfully.

とインストールに成功したことが分かります。
これで解決です

その他

調べると他の方法もあるようです。

コマンド
$ composer update

でエラーが出た場合、

コマンド
$ php -d memory_limit=512M composer update

php -d memory_limit=512Mをつけることで実行可能みたいです。

composer requireだと

$ php -d memory_limit=-1 composer.phar require ~

と記述することで実施可能みたいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ソートの関数を使わずに配列を並び替える「バブルソートアルゴリズム」

課題

下のようなGETポストが渡ってきたと仮定し、それをソート関数を使わずに小さい順に並び替えるという機能をPHPで作る学習で試行錯誤したのでその跡を残しておきたく。

http://localhost:10080/index.php?array=3,2,1,4,15,18,13,99,77,66,1,100,0

バブルソートというアルゴリズムでこれが実現できます。バブルソートとは、一つのループの中にもう一つループを作り、内側のループで隣り合う数字の大小を比較して並び替えていくことで、配列全体を並び替えます。Wikipediaの説明がわかりやすいです。

実装

<?php
$array = explode(',', $_GET['array']); //explode()はExcelの「区切り」みたいなもの

$count = count($array);
for ($i = 0; $i < $count; $i++) {
  for ($n = 1; $n < $count; $n++) {
    if($array[$n-1] > $array[$n]) {
      $temp = $array[$n]; //右隣の方が大きかったらその右の数字を$tempに逃がす
      $array[$n] = $array[$n-1]; //左側を右側に代入
      $array[$n-1] = $temp; //逃がしていた右側を左側に代入
    }
  }
}
print_r($array);
?>

アルゴリズムとは関係のない、PHPの復習ですが、$_GETはPHPの定義済みの変数で、URLで渡されたパラメータ(クエリストリング、クエリ文字列と同義)を受け取ります。参考→URLパラメータ
$_GETにはPHPの関数urldecode()が処理してから値が渡されるようです。

結果

この通り並び替えられています↓
スクリーンショット 2020-08-22 18.20.31.png

改善

$n-1が何回も出てくるのが気になったので、こうしてみました↓
きちんと同じ結果が得られます。

$count = count($array);
for ($i = 0; $i < $count; $i++) {
  for ($b = 1; $b < $count; $b++) { //右隣の数字を$bとする
    $a = $b-1; //←左隣の数字を$aとする
    if($array[$a] > $array[$b]) {
      $temp = $array[$b];
      $array[$b] = $array[$a];
      $array[$a] = $temp;
    }
  }
}

余談

試行錯誤の跡として、こちらが最初にトライしたコーディングです。配列の中から一番小さい値を探して別の変数に代入し、その値を元の配列から削除するというものです。これだと同じ数が複数個あった場合(今回だと1が2回ある)、その数は1個しか取り出せませんでした。
http://localhost:10080/php-pre-challenge2/index.php?array=3,2,1,4,15,18,13,99,77,66,1,100,0

<?php
$array = explode(',', $_GET['array']);

$sorted_array = [];
$count = 0;
while ($count < count($array)) {
  $tmp = null;
  foreach ($array as $key => $value) {
    if (in_array($value, $sorted_array)) continue;
    if ($tmp === null) {
      $tmp = $value;
    } else {
      $tmp = min($tmp, $value);
    }
  }
  $sorted_array[] = $tmp;
  $count++;
}

print_r($sorted_array);

?>

結果↓ ご覧の通り1が一つしか取り出せていません。
スクリーンショット 2020-08-22 18.16.08.png

ご指摘などあれば、コメントにてお願いします!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WordPressで記事の状態を確認する関数

公式 → WordPress codex

WordPressでの記事の状態にてその後の処理を決めるために
記事の状態を取得する処理を実装した

<?php get_post_status( $ID ) ?>

既に用意されている関数だったのでリファレンスをしっかりと読めば
直ぐに処理を追加することが出来た
上記の$IDの中身は下記のいずれかになるのでそれに対して
条件を作れば求めた処理ができる

- 'publish' - 公開済
- 'pending' - 承認待ち
- 'draft' - 下書き
- 'auto-draft' - 新規作成された投稿。まだコンテンツがない。
- 'future' - 予約済(未来に投稿される)
- 'private' - 非公開(ログインしていないユーザーから見えない)
- 'inherit' - リビジョン。get_children() を見てください。
- 'trash' - ゴミ箱にある投稿。バージョン 2.9 で追加された。

条件の例

<?php
    if ( get_post_status ( $ID ) == 'private' ) {
        echo '非公開';
    } else {
        echo '公開済';
    }
?>

今回自分が実装したものは
上記の一例にカスタムフィールドの値の確認を条件に追加したので
それについては後日纏めます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP テンポラリーファイルが作成されるディレクトリを確認する

目的

  • PHPで作成されるテンポラリーファイルがどのディレクトリに作成されるかを得る方法をメモ的にまとめる。

詳細

  • 下記を実行するとsys_temp_dirの値が返される。

    sys_get_temp_dir();
    

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【PHP】日本語のyyyy年MM月dd日という文字列をyyyy-MM-ddにサクッと変換する方法

はじめに

先日teratailで回答した内容と同じになりますが、メモも兼ねて。

PHPのバージョン
7.4.10

コードと簡単な説明

$date = DateTime::createFromFormat('Y年m月d日', '2020年11月19日');
echo $date->format('Y-m-d');
// 出力:2020-11-19

日時表示を特定のルールでフォーマットする場合は、DateTime::createFromFormatが便利です。
第1引数に書式を、第2引数に日時を渡すと、フォーマットされたDateTime型のインスタンスが返ってきます。

返り値
新しい DateTime のインスタンス、失敗した場合に FALSE を返します。

公式ドキュメントにはサンプルや書式のオプションも色々書いてあるので、詳しく知りたい方はそちらをご確認ください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

array_slice関数

array_slice

配列の一部の範囲をスライス(切り取る、取得する)

array_slice(array $array, int $offset [,int $lenght = NULL[, bool $preserve_keys=False]]):array

引数 

$array=>対象の配列

$offset=>取得したい要素

$lenght=>取得したい要素の数

$preservekeys=>trueのときは、引数preservekeys=>trueのときは、引数arrayのキー番号を保持した戻り値を返す。falseのときは、戻り値のキー番号は始まりになる

戻り値

offsetから$lenght分の要素

使用例

入力

$array=["a","b","c","d","e","f","g"];

echo var_dump($array);

$array_slice=array_slice($array,3,2);

echo var_dump($array_slice);

出力

array(7) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" [4]=> string(1) "e" [5]=> string(1) "f" [6]=> string(1) "g" }

array(2) {
  [0]=>
  string(1) "d"
  [1]=>
  string(1) "e"
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む