質問: 下記のような情報をPHPで参照するにはどのような手法がよいでしょうか。 一般的な方法がわからず困っています。 > > アラビア語・・・ar,ar-sa,ar-ae,ar-bh,ar-dz,ar-eg,ar-iq,ar-jo,ar-kw,ar-lb,ar-ly,ar-ma,ar-om,ar-qa,ar-sy,ar-tn,ar-ye > > アフリカーンス語・・・af,af-za > > アルバニア語・・・sq,sq-al > > (以下略) > > > <やりたいこと> 例: arという文字列渡すと、アラビア語と返す。 sq-alと渡すとアルバニア語と返す。 ・・・ <思いつく方法と考え> 1. DBに格納する 速度も落ちるしデータ自体が不変のためよくない気がする・・・ 2. 配列データに変換(シリアライズ化して外部化) 例:'ar'=>'アラビア語','ar-sa'=>'アラビア語'・・・ これが一番よさそうな気がする・・・ 3. 正規表現を使う 例:if(preg_match(/ar|ar-sa|ar-ae/・・・){ return 'アラビア語'; } 重そうだしコードが・・・ 4. if、スイッチ if(== 'ar') return 'アラビア語'; if(== 'ar-sa') return 'アラビア語'; 処理的には一番早そうだけどコード的に微妙・・・ よろしくお願いいたします。
回答: 再利用や綺麗さを考えるとどれもイマイチですね。 1はDBというシステムと密結合、マイグレーションファイルで管理すればいいので△ 2はPHP言語と密結合、いろんな可能性を考えた時の最適解に近そうなので○ 3と4は保守し難いので論外...ただしコンパイル後としてはアリか? あるべき姿で考えてDBサーバーに突っ込むのが嫌なら、JSONやSQLiteを利用する案もあります。 ``` { ar: "アラビア語", af: "アフリカーンス語", ... } ``` しかしJSONファイルをPHPで都度読み込んでデコードし始めると速度はあってないようなもの。 速度を求めるなら自力でクイックソートのコードを書いたりする必要がありそうです。 速度と綺麗さを求めるのであれば、コンパイル用のNode.jsバッチを作成して... JSONファイルから下記のようなPHPコードに変換してみてはいかがでしょう? 作ってみたら微妙なコードになっちゃいましたが、PHP7なら純粋な配列になるのでそこそこ速そうです。 ```