質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

2203閲覧

PHPのSwitch文をコンパクトにする方法

dokoniarukana

総合スコア31

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/07 04:17

編集2016/08/07 07:58

###前提・実現したいこと

初心者で申し訳ありません。
都道府県すべてのあるデータを取得しているのですが、
コードをご覧のとおり、東北地方のeq()変数は(2,4,5)で、関東が(1,3,4)、
その他の各地方もあり、それも下に続いています。[ex.関西(0,2,3) 四国(3,5,6) 近畿(4,6,7)...]
このまま全て書くと長くなってしまうので行を減らすことはできないでしょうか。

URLも「http://」と「.com/」は一緒なので省略?と
いうのでしょうか、
そういった感じの表記はできるのでしょうか。
間はローマ字で県名が入ります。

よろしくおねがいします。

$switch= '北海道'; //地域によって異なるため変数とURLを定義 switch ($switch){ case '北海道': $eq = array(2,4,5); // $url = 'http://hokkaidou.com/'; break; case '東京': $eq = array(1,3,4); // $url = 'http://toukyou.com/'; break; case '青森': $eq = array(2,4,5); $url = 'http://aomori.com/'; break; case '千葉': $eq = array(1,3,4); $url = 'http://chiba.com/'; break; case '秋田': $eq = array(2,4,5); $url = 'http://akita.com/'; break; case '埼玉': $eq = array(1,3,4); $url = 'http://saitama.com/'; break; }

追記
下記のコードで無事に短くすることができました。
もうひとつ質問なのですが、

$pref_data = array( '北海道' => array(2,4,5,'hokkaidou'), '東京' => array(1,3,4,'toukyou')); $eq = $pref_data[$switch]; $url = 'http://' . array_pop($eq) . '.com/';

↓このような代入?はできないのでしょうか。

$a = '2,4,5' $b = '1,3,4' $pref_data = array( '北海道' => array($a,'hokkaidou'), '東京' => array($b,'toukyou')); $eq = $pref_data[$switch]; $url = 'http://' . array_pop($eq) . '.com/';

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asahina_dev

2016/08/07 08:18

私の回答をよく見るんだ
guest

回答4

0

php

1$arrPref = array( 2 1 => '北海道' 3 , 2 => '青森' 4); 5 6$arrSetting = array( 7 1 => array( 8 'eq' => array(2, 4, 5) 9 , 'url' => 'http://hokkaidou.com/' 10 ) 11 , 2 => array( 12 'eq' => array(2, 4, 5) 13 , 'url' => 'http://aomori.com/' 14 ) 15); 16 17$res = $arrSetting[array_search('北海道', $arrPref)]; 18var_dump($res);

投稿2016/08/07 04:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/07 05:12

これって、キーに日本語使うのは気持ち悪いなあ。ってことですか?
退会済みユーザー

退会済みユーザー

2016/08/07 05:17 編集

それもあるけど、都道府県のリストっていろんな場面で利用されるであろうという感じですね。都道府県のセレクトボックスを作りたい場合、丸ごとひとつの配列で定義しちゃうと、使いにくい。 DBの正規化と同じアプローチです。
退会済みユーザー

退会済みユーザー

2016/08/07 05:18

ありがとうございます。理解できました。 dokoniarukana さん、横から失礼しました。
guest

0

ベストアンサー

大差ないですけど、こんなんとか

PHP

1$pref_data = array( 2 '北海道' => array(2,4,5,'hokkaidou'), 3 '東京' => array(1,3,4,'toukyou'), 4 '青森' => array(2,4,5,'aomori'), 5 '千葉' => array(1,3,4,'chiba'), 6 '秋田' => array(2,4,5,'akita'), 7 '埼玉' => array(1,3,4,'saitama')); 8$eq = $pref_data[$switch]; 9$url = 'http://' . array_pop($eq) . '.com/';

--- 追加 ---

そういうときは

PHP

1$a = '2,4,5' 2$b = '1,3,4' 3 4$pref_data = array( 5 '北海道' => array($a,'hokkaidou'), 6 '東京' => array($b,'toukyou')); 7list($s1, $s2) = $pref_data[$switch]; 8$eq = explode(',', $s1); 9$url = 'http://' . $s2 . '.com/';

もしくは

PHP

1$a = array(2,4,5); 2$b = array(1,3,4); 3 4$pref_data = array( 5 '北海道' => array($a,'hokkaidou'), 6 '東京' => array($b,'toukyou')); 7list($eq, $str) = $pref_data[$switch]; 8$url = 'http://' . $str . '.com/';

投稿2016/08/07 04:53

編集2016/08/07 08:12
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2016/08/07 05:05

あー、やっぱキーに日本語使うのは気持ち悪いなあ。
dokoniarukana

2016/08/07 05:12

理想形です。 ありがとうございました。
asahina_dev

2016/08/07 05:20

それはいえているがマジレスするとDBにいれるか設定ファイルを使えというレベル。 長くなるがこれもいいかもね http://ideone.com/p8RVjz
takasima20

2016/08/07 05:28

asahina_devさん 全都道府県の分あるとしたらそーっスよねえ。 っていうか、ver_export初めて見た気がする。 php もいろいろ新しいのできてんな~
asahina_dev

2016/08/07 05:37

そうだっけぇとしらべてみた var_export(PHP 4 >= 4.2.0, PHP 5, PHP 7) っぽい
dokoniarukana

2016/08/07 07:46 編集

質問なのですが、以下のような置き換えを やってみたらエラーを吐いたので代入は出来ないのでしょうか。 $a = '2,4,5' $b = '1,3,4' $pref_data = array( '北海道' => array($a,'hokkaidou'), '東京' => array($b,'toukyou'),...略
dokoniarukana

2016/08/07 08:13

助かりました。勉強になります。 ありがとうございました。
guest

0

php

1$pref = array( 2 "北海道" => array ("url", $eq /* array() */), 3 "青森" => array ("url", $eq /* array() */), 4); 5 6list($url, $eq) = $pref[$name]; 7

とかかなぁ

投稿2016/08/07 04:37

asahina_dev

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/07 04:48

$res = $arrSetting[array_search('東海道', $arrPref)]; ↓ $res = $arrSetting[array_search('青森', $arrPref)];
asahina_dev

2016/08/07 04:51

ないときにちゃんと動作するかの試験w
退会済みユーザー

退会済みユーザー

2016/08/07 04:52

ですねw 失礼しました。
guest

0

あ、解決してた・・・。

PHP

1$key = '北海道'; 2$tdfk = '|北海道/2,4,5/hokkaidou|東京/1,3,4/toukyou|青森/2,4,5/aomori|千葉/1,3,4/chiba|秋田/2,4,5/akita|埼玉/1,3,4/saitama|'; 3$match_num = preg_match( '/\|('.preg_quote( $key, '/' ).'[^\|]+)/', $tdfk, $match ); 4var_dump( $match );

投稿2016/08/07 05:18

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問