質問: `test.com/hogehoge/?yoko=2&tate=3`のようにURLパラメーターから2つの値を受け取ります。 添付画像のように受け取った2つの値(タテ・ヨコ)から、参照されるデータを突き止めます。 仮に横が2縦が3でしたら"1,2,3"がほしいわけです。 ![画像の説明をここに入力](https://i.stack.imgur.com/j8p3c.png) (求めた数字はまた次の処理に使いますが、一旦関係ないので気にしなくていいです。) この時どういうやり方で求めたい値を返すのがスマートなのか悩みました。 1if文で縦が〇&横が△のとき~ でやる ``` ``` 表と同じように配列で用意する ``` ``` その他switch文や連想配列などなど... 上記のような書き方で書いてみましたが、あまり賢い書き方に思えずモヤモヤしたので質問しました。 なにか良い書き方があれば教えて頂きたいです。よろしくお願い致します。
回答: まず前提条件として、今回の表をデータ化してということなので、データ構造の問題となります。 PHPはデータ構造ではなく、アルゴリズムを扱うことが得意な言語です。 そのため、いかにきれいにスマートにといってもPHPではあまりきれいにならないという前提に立つ必要があります。 表形式のデータ構造をきれいに整理して扱いやすく管理するには、XMLやjsonやCSVなどの構造化された文書を利用することが最もよいでしょう。今後の保守を考えるとそれらを使うことを検討してみてください。 システムから修正する要件があるのであれば、それこそDBなども利用することも考えたほうが良いでしょう。 それでもPHPで表形式をデータ構造で利用したい場合は配列を使うことが多いと思います。 アクセスがしやすいですし、IFと違って変更に耐えうる形になるでしょう。 あとは可読性の問題なだけかと思っています。となると私でしたらコメントなどを駆使してそれなりにきれいにしますかね。 ``` $map = [ /* * 0, 1, 2, 3, 4, 5, 6, 7, 8, */ 0 => [ "1,2", "1,2,3", "2,3", "2,3,4", "2,3,4", "3,4,5", "4,5", "4,5,6", "4,5,6"], 1 => [ "1,2", "1,2,3", "2,3", "2,3,4", "2,3,4", "3,4,5", "4,5", "4,5,6", "4,5,6"], 2 => [ "1,2", "1,2,3", "2,3", "2,3,4", "2,3,4", "3,4,5", "4,5", "4,5,6", "4,5,6"], 3 => [ "2,3", "2,3", "2,3", "2,3,4", "2,3,4", "3,4,5", "4,5", "4,5,6", "4,5,6"], 4 => [ "3,4", "3,4", "3,4", "3,4", "3,4", "3,4", "4,5", "4,5,6", "4,5,6"], 5 => [ "1,2", "1,2,3", "2,3", "2,3,4", "2,3,4", "3,4,5", "4,5", "4,5,6", "4,5,6"], /*中略*/ ] ``` それでもあまりやりたくはないですね。私だったらJSONもしくはDBで構造化してしまって、それをPHPで参照する方法をとるでしょう。