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

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

ただいまの
回答率

90.50%

  • PHP

    20749questions

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

for

解決済

回答 5

投稿

  • 評価
  • クリップ 1
  • VIEW 818

nakaoti-maguro

score 17

前提・実現したいこと

初めまして。今、私は友人から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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/04/10 22:55

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

    キャンセル

回答 5

+3

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

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

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

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

$newActor = array_map(function () {
    return array_combine(array('name', 'gender', 'age', 'pref'), func_get_args());
}, $actor[0], $actor[1], $actor[2], $actor[3]);

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 19:52

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

    キャンセル

checkベストアンサー

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 19:55

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

    キャンセル

+2

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

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

foreach($actor as $val){
 if($val['gender'] =='男' && $val['old'] >= 20 &&  $val['old'] <= 29 ){ //ここで必要に応じて条件を指定してください。
  echo $val['name'];
  }else{
   continue;
  }

}


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/11 00:24

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

    キャンセル

  • 2016/04/11 10:51 編集

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

    ソース全部書くのは簡単ですけど それじゃ宿題になりませんから..説明だけにさせて頂きます。^^
    頑張って下さいね...♪

    キャンセル

  • 2016/04/12 19:48

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

    キャンセル

+1

僕もやった。

<?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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

$table = '';
$q = array(
      '男性' => array()
    , '20代' => array()
    , '20代男性' => array()
);
$actors = array(
      array( '名前' => '菅田将暉',   '性別' => '男', '年齢' => 23, '出身' => '大阪府' )
    , array( '名前' => '松田龍平',   '性別' => '男', '年齢' => 32, '出身' => '東京都' )
    , array( '名前' => '二階堂ふみ', '性別' => '女', '年齢' => 21, '出身' => '沖縄県' )
    , array( '名前' => '綾野剛',     '性別' => '男', '年齢' => 34, '出身' => '岐阜県' )
    , array( '名前' => '門脇麦',     '性別' => '女', '年齢' => 23, '出身' => '東京都' )
    , array( '名前' => '広瀬すず',   '性別' => '女', '年齢' => 17, '出身' => '静岡県' )
);

foreach( $actors as $actor ) {
    $table .= '<tr><td>'.implode( '</td><td>', $actor ).'</td></tr>';
    if ( $actor[ '性別' ] == '男' && $actor[ '年齢' ] >= 20 &&  $actor[ '年齢' ] < 30 ) {
        $q[ '20代男性' ][] = $actor[ '名前' ];
    }
    // if ( ) {} 他の項目もチェック
}

echo $table;
echo implode( '、', $q[ '20代男性' ] );

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/11 00:56

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

    キャンセル

  • 2016/04/11 01:52

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

    キャンセル

  • 2016/04/12 19:47

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20749questions

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