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

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

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

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

Q&A

解決済

2回答

1161閲覧

php for文にて、表の計算ができなくて困ってます。

YTKM

総合スコア22

PHP

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

0グッド

0クリップ

投稿2022/06/23 08:49

php初心者です。

問題・コード現状

<?php // 以下配列の中身をfor文を使用して表示してください。 // 表示はHTMLの<table>タグを使用すること /** * 表示イメージ * _________________________ * |_____|_c1|_c2|_c3|横合計| * |___r1|_10|__5|_20|___35| * |___r2|__7|__8|_12|___27| * |___r3|_25|__9|130|__164| * |縦合計|_42|_22|162|__226| * ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ */ $arr = [ 'r1' => ['c1' => 10, 'c2' => 5, 'c3' => 20], 'r2' => ['c1' => 7, 'c2' => 8, 'c3' => 12], 'r3' => ['c1' => 25, 'c2' => 9, 'c3' => 130] ]; for ($i=0; $i <count($arr); $i++) { echo $arr['r1']; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>テーブル表示</title> <style> table { border:1px solid #000; border-collapse: collapse; } th, td { border:1px solid #000; } </style> </head> <body> <table> <tr><th>_____</th><th>_c1</th><th>_c2</th><th>_c3</th><th>横合計</th></tr> <tr><td>___r1</td><td>_10</td><td>__5</td><td>_20</td><td><?php ?></td></tr> <tr><td>___r2</td><td>__7</td><td>__8</td><td>_12</td><td><?php ?></td></tr> <tr><td>___r3</td><td>_25</td><td>__9</td><td>130</td><td><?php ?></td></tr> <tr><td>縦合計</td><td><?php ?></td><td><?php ?></td><td><?php ?></td><td><?php ?></td></tr> </table> <!-- ここにテーブル表示 --> </body> </html>

試した事

for ($i=0; $i <count($arr); $i++) { echo $arr['r1']; }

エラー表示・ブラウザ現状

Image from Gyazo

最終的には縦横の合計値、縦横の合計値の合計値を計算したいのですが、そもそもArrayとなってしまい、値すら取得できない状況です。。。

for文にて多重構造の値の取得方法を調べたのですが、この状況と一致するものが分からず、周りに聞ける方も居ない為質問させて頂きました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

今回の命題はforではなくforeachでやるべきですね
とはいえ課題っぽいのでforを無理やり使うとこう

PHP

1<?PHP 2$arr = [ 3 'r1' => ['c1' => 10, 'c2' => 5, 'c3' => 20], 4 'r2' => ['c1' => 7, 'c2' => 8, 'c3' => 12], 5 'r3' => ['c1' => 25, 'c2' => 9, 'c3' => 130] 6]; 7$sum=[]; 8$tbody="<tbody>\n"; 9for($i=0;$i<count($arr);$i++){ 10 $tbody.="<tr>\n"; 11 $tbody.="<th>".array_keys($arr)[$i]."</th>"; 12 for($j=0;$j<count(array_values($arr)[$i]);$j++){ 13 $val=array_values(array_values($arr)[$i])[$j]; 14 $tbody.="<td>$val</td>"; 15 if(!isset($sum[$j]))$sum[$j]=0; 16 $sum[$j]+=$val; 17 } 18 $tbody.="<td>".array_sum(array_values($arr)[$i])."</td>"; 19 $tbody.="</tr>\n"; 20} 21$tbody.="<tr>\n"; 22$tbody.="<th>計</th>"; 23for($i=0;$i<count(array_values($arr)[0]);$i++){ 24 $tbody.="<td>".$sum[$i]."</td>"; 25} 26$tbody.="<td>".array_sum($sum)."</td>"; 27$tbody.="</tr>\n"; 28 29$tbody.="</tbody>\n"; 30?> 31<!DOCTYPE html> 32<style> 33table { 34 border:1px solid #000; 35 border-collapse: collapse; 36} 37th, td { 38border:1px solid #000; 39} 40</style> 41<table> 42<thead> 43<tr> 44<th>*</th> 45<th>c1</th> 46<th>c2</th> 47<th>c3</th> 48<th></th> 49</tr> 50</thead> 51<?= $tbody;?> 52</table>

投稿2022/06/23 09:42

yambejp

総合スコア114843

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

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

YTKM

2022/06/24 03:26

最後まで計算して頂きありがとうございます。 表の表示や計算など、勉強箇所が詰まった内容でした。 改めて自分でも解き直して、理解を深めさせて頂きたいと思います。
guest

0

そもそもArrayとなってしまい、値すら取得できない状況です。。。

取得できないのではなく、そのままechoしていることが問題です。デバッグ用に配列の中身を見たいなら、var_dumpなどを使いましょう。

投稿2022/06/23 09:01

maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問