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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Q&A

解決済

2回答

8509閲覧

switchとforeachの組み合わせについて

kinmo_mark2

総合スコア10

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

0グッド

1クリップ

投稿2014/09/24 01:39

いつもお世話になっております。
私は現在PHPを勉強しているのですがひとつの課題で詰まってしまっています。

以下が課題の内容になります。

switchを利用して以下の配列の分類を行ってください。
$test = array(
'a' => array('neko', 'アメショー'),
'b' => array('inu', 'ブルドック'),
'c' => array('other', 'うさぎ'),
'd' => array('neko', 'トラ'),
'e' => array('other', 'カモメ'),
'f' => array('other', 'スズメ'),
'g' => array('inu', 'レトリーバー'),
);


つまりは動物の種類(猫、犬、その他)に分類を行い、配列を行う課題なのですが、どうしてもうまくいきません。

どなたか課題についてアドバイスいただけたら幸いです。

失礼致します。

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

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

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

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

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

guest

回答2

0

文字列になっている結果を配列に戻すのは出来なくもないですが。
配列の形で分類すればよいかと思います。

$test = array(
'a' => array('neko', 'アメショー'),
'b' => array('inu', 'ブルドック'),
'c' => array('other', 'うさぎ'),
'd' => array('neko', 'トラ'),
'e' => array('other', 'カモメ'),
'f' => array('other', 'スズメ'),
'g' => array('inu', 'レトリーバー'),
);

$out = array();
foreach ($test as $data) {
switch($data[0]) {
case 'inu':
$out['inu'][] = $data[1];
break;
case 'neko':
$out['neko'][] = $data[1];
break;
case 'other':
$out['other'][] = $data[1];
break;
}
}
var_dump($out);

ちなみにこれならswitch使わずとも、

$out = array();
foreach ($test as $data) {
$out[$data[0]][] = $data[1];
}
var_dump($out);

で解決しますね。

投稿2014/09/24 15:46

masato

総合スコア13

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

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

kinmo_mark2

2014/09/25 04:24

ご回答ありがとうございました。 なるほど、そのような方法もあるんですね。勉強になりました。
guest

0

ベストアンサー

下記のコードはどうでしょうか?

lang

1[PHP] 2 3$test = array( 4 'a' => array('neko', 'アメショー'), 5 'b' => array('inu', 'ブルドック'), 6 'c' => array('other', 'うさぎ'), 7 'd' => array('neko', 'トラ'), 8 'e' => array('other', 'カモメ'), 9 'f' => array('other', 'スズメ'), 10 'g' => array('inu', 'レトリーバー'), 11); 12$neko = ""; 13$inu = ""; 14$other = ""; 15$error = ""; 16$message = ""; 17 18foreach($test as $val){ 19 switch($val[0]){ 20 case 'neko' : $neko .= "{$val[1]}<br />"; 21 break; 22 case 'inu' : $inu .= "{$val[1]}<br />"; 23 break; 24 case 'other' : $other .= "{$val[1]}<br />"; 25 break; 26 default: $error = "{$val[1]}は、分類以外の項目です<br />"; 27 } 28} 29 30$message .= (!empty($neko))?"---ねこ---<br />{$neko}<hr />":""; 31$message .= (!empty($inu))?"---いぬ---<br />{$inu}<hr />":""; 32$message .= (!empty($other))?"---その他---<br />{$other}<hr />":""; 33$message .= (!empty($error))?"---分類外---<br />{$error}<hr />":""; 34 35echo $message; 36

$test の array('neko', 'アメショー'), 等が、
連想配列ならforeachのネストで出来るようになりますよ。
まあ、処理数を考えたら余り良くないですかね(笑)

投稿2014/09/24 07:33

NIA

総合スコア181

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

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

kinmo_mark2

2014/09/24 07:55

回答ありがとうございました!大体理想通りです。 もうひとつ質問なのですが、今回foreachとswitchで分類したものは再度配列化等はできるのでしょうか? 例:) array(0=>string'アメショー', 1=>string'トラ'..... ); array(0=>string'ブルドック', 1=>string'レトリーバー', ); 等といった形にできますでしょうか? ご指導いただけると助かります。よろしくお願いいたします。
NIA

2014/09/24 08:45

連想配列の方が好ましいですね! 下記で、同じ出力結果になりますよ! $test = array( 'a' => array('neko'=> 'アメショー'), 'b' => array('inu'=> 'ブルドック'), 'c' => array('other'=> 'うさぎ'), 'd' => array('neko'=> 'トラ'), 'e' => array('other'=> 'カモメ'), 'f' => array('other'=> 'スズメ'), 'g' => array('inu'=> 'レトリーバー'), ); foreach($test as $tmp){ foreach($tmp as $key => $val){ switch($key){ case 'neko' : $neko .= "{$val}<br />"; break; case 'inu' : $inu .= "{$val}<br />"; break; case 'other' : $other .= "{$val}<br />"; break; default: $error = "{$val}は、分類以外の項目です<br />"; } } }
kinmo_mark2

2014/09/25 04:23

返信遅くなりました。申し訳ありません。 ご回答ありがとうございます! 理想の形にすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問