###前提・実現したいこと
初めまして。今、私は友人から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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア4514
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
$eはどこにいったのでしょうか?①男性のとこだけ、for文で書くならこんな感じです。
for($e = 0; $e <= 5; $e++){ if(($gender == $actor[1][$e])){ $table2 .= $actor[0][$e]; } }
投稿2016/04/11 02:19
総合スコア266
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/12 10:55
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/10 15:24
退会済みユーザー
2016/04/11 01:53 編集
2016/04/12 10:48
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>";
投稿2017/07/17 08:14
総合スコア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総合スコア69400
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/10 15:56
2016/04/10 16:52
2016/04/12 10:47
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。