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

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

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

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

Q&A

解決済

5回答

1473閲覧

for

nakaoti-maguro

総合スコア25

PHP

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

0グッド

1クリップ

投稿2016/04/10 13:51

###前提・実現したいこと
初めまして。今、私は友人からPHPを教わっています。
その友人から出された宿題に関して分からないことが起きてしまったため質問させていただきます。
出された宿題は『1.多次元配列とfor文を使用して、名前・性別などの会員情報の一覧表を作る』といったものです。
表を作ることはできたのですが、問題はその次の内容です。
『2.1で用いた会員情報のうち、以下に該当する名前を表示する。』
①男性
②20代
③20代男性
④東京都または大阪府の出身
⑤女性で、東京都または大阪府の出身

for、if文を使って作っていましたが①の時点で躓いてしまい、分かる範囲でいじってみたりしましたがうまくいかず、分からなくなってしまいました。
お恥ずかしながら初心者のため、理解が足りていませんが、なにとぞご回答お願いします。

イメージ説明

###該当のソースコード
$table = '';
$actor = array(array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'),array('男','男','女','男','女','女'),array(23,32,21,34,23,17),array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県'));

for($c = 0; $c <= 5; $c++){

$table .= '<tr>'; for($d = 0; $d <= 3; $d++){ $table .= '<td>' . $actor[$d][$c] . '</td>'; } $table .= '</tr>';

}

$table2 = '';
$gender = '男';
for($e = 0; $e <= 5; $e++){
if(($gender == $actor[1][0])){
$table2 .= $actor[0][0];
}
}

###補足情報(言語/FW/ツール等のバージョンなど)
XAMPP 3.2.1
Dreamweaver cs6

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

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

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

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

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

kei344

2016/04/10 13:55

コードはコードブロック(```で挟む```)に入れてください。
guest

回答5

0

php

1$actor = array(array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'),array('男','男','女','男','女','女'),array(23,32,21,34,23,17),array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県'));

PHP ではこのような構造の 2 次元配列はあまり使われなうように思うので kei344 さんが書かれているような構造に置き換えるほうが良いと思います。

元データが↑の形式である、ということが必須なのであれば、次のようにデータの構造を実行時に置き換えてしまえばと思います。

php

1$actor = array(array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'),array('男','男','女','男','女','女'),array(23,32,21,34,23,17),array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県')); 2 3$newActor = array_map(function () { 4 return array_combine(array('name', 'gender', 'age', 'pref'), func_get_args()); 5}, $actor[0], $actor[1], $actor[2], $actor[3]);

こうすれば後は kei344 さんの回答と同じようにできますよ。

↑だと array_map とか array_combine とか使ってますけど、 foreach でベタにやるならこんな感じでしょうか。

php

1$actor = array(array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'),array('男','男','女','男','女','女'),array(23,32,21,34,23,17),array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県')); 2$newActor = array(); 3foreach ($actor[0] as $i => $val) { 4 $newActor[] = array( 5 'name' => $actor[0][$i], 6 'gender' => $actor[1][$i], 7 'age' => $actor[2][$i], 8 'pref' => $actor[3][$i], 9 ); 10}

投稿2016/04/11 03:01

ngyuki

総合スコア4514

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

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

nakaoti-maguro

2016/04/12 10:52

お返事遅くなってしまい大変申し訳ありません。 ご回答ありがとうございます!丁寧な説明で分かりやすかったです! 頑張って挑戦してみます!
guest

0

ベストアンサー

$eはどこにいったのでしょうか?①男性のとこだけ、for文で書くならこんな感じです。

for($e = 0; $e <= 5; $e++){ if(($gender == $actor[1][$e])){ $table2 .= $actor[0][$e]; } }

投稿2016/04/11 02:19

act823

総合スコア266

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

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

nakaoti-maguro

2016/04/12 10:55

ご返答遅くなってしまい大変申し訳ありません。 ご回答ありがとうございます![$e]はそこに入れればよかったのですか! ずっと分からずじまいで悩んでいました。 ありがとうございます!
guest

0

配列を読み込む場合は for ではなくて foreachを使った方がいいと思いますよ...

PHP

1$actor = array(); 2$actor['name']= array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'); 3$actor['gender'] = array('男','男','女','男','女','女'); 4$actor['old'] = array(23,32,21,34,23,17); 5$actor['country'] = array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県'); 6 7foreach($actor as $val){ 8 if($val['gender'] =='男' && $val['old'] >= 20 && $val['old'] <= 29 ){ //ここで必要に応じて条件を指定してください。 9 echo $val['name']; 10 }else{ 11 continue; 12 } 13 14}

こんなかんじでどぉでしょぉ?

投稿2016/04/10 14:35

編集2016/04/10 14:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nakaoti-maguro

2016/04/10 15:24

bodyのechoで出したい場合$valでいいのでしょうか。 $val['gender'] =='男'と条件を出して見ましたが、『Notice: Undefined index: gender 』と言われてしまいました…。
退会済みユーザー

退会済みユーザー

2016/04/11 01:53 編集

お返事遅くなってしまって ごめんなさい もちろん「echo」すれば閲覧しているローカルのブラウザに表示されますよ HTMLの構文に合わせて工夫してくださいね エラーコード「Undefined index: gender 」は「gender 」って変数は定義されていませんって事ですよね  nakaoti-maguroさんの書いた配列の組み方で言うと $val[0]==’男’って事になります。 どんな形で多重配列が組み込まれているかは var_dump(配列名);で確認する事が出来ますよ ソース全部書くのは簡単ですけど それじゃ宿題になりませんから..説明だけにさせて頂きます。^^ 頑張って下さいね...♪
nakaoti-maguro

2016/04/12 10:48

お返事遅くなってしまい申し訳ありません。 ご回答ありがとうございました!説明ありがとうございます! 頑張って完成させます!
guest

0

僕もやった。

<?php $table = ''; $actor_source = array( array('菅田将暉','松田龍平','二階堂ふみ','綾野剛','門脇麦','広瀬すず'), array('男','男','女','男','女','女'), array(23,32,21,34,23,17), array('大阪府','東京都','沖縄県','岐阜県','東京都','静岡県') ); $keyOfIdx = array("name", "sex", "age", "from"); for($i=0; $i<count($actor_source); $i++){ for($j=0; $j<count($actor_source[$i]); $j++){ $key = $keyOfIdx[$i]; $actors[$j][$key] = $actor_source[$i][$j]; } } // print_r($actors); echo "<table border=1>"; echo "<tr>"; echo "<td>名前</td>"; echo "<td>年齢</td>"; echo "<td>性別</td>"; echo "<td>出身</td>"; echo "</tr>"; foreach($actors as $actor){ echo "<tr>"; foreach($actor as $value){ echo "<td>"; echo $value; echo "</td>"; } echo "</tr>"; } echo "</table>"; echo "<br>"; /* ①男性 ②20代 ③20代男性 ④東京都または大阪府の出身 ⑤女性で、東京都または大阪府の出身 */ echo "①男性 : "; foreach($actors as $actor){ if($actor["sex"] === "男"){ echo $actor["name"] , " "; } } echo "<br>"; echo "②20代 : "; foreach($actors as $actor){ if(20<= $actor["age"] && $actor["age"] <= 29){ echo $actor["name"] , " "; } } echo "<br>"; echo "③20代男性 : "; foreach($actors as $actor){ if(20<= $actor["age"] && $actor["age"] <= 29 && $actor["sex"] === "男"){ echo $actor["name"] , " "; } } echo "<br>"; echo "④東京都または大阪府の出身 : "; foreach($actors as $actor){ if($actor["from"] === "東京都" || $actor["from"] === "大阪府"){ echo $actor["name"] , " "; } } echo "<br>"; echo "⑤女性で、東京都または大阪府の出身 : "; foreach($actors as $actor){ if($actor["sex"] === "女" && ($actor["from"] === "東京都" || $actor["from"] === "大阪府")){ echo $actor["name"] , " "; } } echo "<br>";

https://paiza.io/projects/e/T_p8cLki8TGFjOcNYz-Mmg

投稿2017/07/17 08:14

yuzunoha123

総合スコア28

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

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

0

チェックしてないけどこんな感じにも書けるはず。

PHP

1$table = ''; 2$q = array( 3 '男性' => array() 4 , '20代' => array() 5 , '20代男性' => array() 6); 7$actors = array( 8 array( '名前' => '菅田将暉', '性別' => '男', '年齢' => 23, '出身' => '大阪府' ) 9 , array( '名前' => '松田龍平', '性別' => '男', '年齢' => 32, '出身' => '東京都' ) 10 , array( '名前' => '二階堂ふみ', '性別' => '女', '年齢' => 21, '出身' => '沖縄県' ) 11 , array( '名前' => '綾野剛', '性別' => '男', '年齢' => 34, '出身' => '岐阜県' ) 12 , array( '名前' => '門脇麦', '性別' => '女', '年齢' => 23, '出身' => '東京都' ) 13 , array( '名前' => '広瀬すず', '性別' => '女', '年齢' => 17, '出身' => '静岡県' ) 14); 15 16foreach( $actors as $actor ) { 17 $table .= '<tr><td>'.implode( '</td><td>', $actor ).'</td></tr>'; 18 if ( $actor[ '性別' ] == '男' && $actor[ '年齢' ] >= 20 && $actor[ '年齢' ] < 30 ) { 19 $q[ '20代男性' ][] = $actor[ '名前' ]; 20 } 21 // if ( ) {} 他の項目もチェック 22} 23 24echo $table; 25echo implode( '、', $q[ '20代男性' ] );

投稿2016/04/10 15:28

編集2016/04/10 15:31
kei344

総合スコア69400

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

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

nakaoti-maguro

2016/04/10 15:56

ご回答ありがとうございます。 arrayの中はなるべく名前、性別、年齢、出身で纏めたいのです。 そのうえでforを使った方法を教えてくださらないでしょうか。
kei344

2016/04/10 16:52

質問文に書かれたコードには「 for($c = 0; $c <= 5; $c++){} と for($e = 0; $e <= 5; $e++){} はそれぞれ配列の中身を順番に走査しているのに、後半のほうではしていない」と言う部分に問題があります。 そのあたりからがんばってください。
nakaoti-maguro

2016/04/12 10:47

お返事大変遅くなってしまい申し訳ありません。 ご回答ありがとうございます!頑張ります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問