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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

6回答

3227閲覧

phpで表を作成したいです。

satou_2897

総合スコア0

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/07/01 13:50

前提・実現したいこと

連想配列とforeach文を利用して、画像のような表を作るコードを知りたいです。

発生している問題・エラーメッセージ

php

エラーメッセージ

該当のソースコード

試したことイメージ説明

テキストなどを見ても、載っていなくわかりませんでした。
コードを見れば、理解できると思うのでお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

tanat

2020/07/01 16:01

学校の先生は結構こういうサイトをチェックしているので、削除依頼を出されることをお勧めしますよ。
m.ts10806

2020/07/01 20:28 編集

効果測定レベルでは絶対に習っていないような難易度の丸投げ回答で大喜利コードが来ても「学ぶことが多い」と言えるんでしょうかね。 この議題ができないあなたには説明ができないし、回答者も真面目に解説はしないでしょう。 そのまま提出したら非常にマズい事態になると思います。 効率以前の問題。プログラミングとしては学べません。 「人生の失敗」として学ぶことになるかもしれませんね。 効率、効率、といっても使いどころを間違えるとそれはもう非効率にしかならないことは覚えておいてください。 既に指摘があるように、ある程度、Webに詳しい人ならこのサイトは知ってるし、案外見てるものです。インターネットがあれば世界中どこからでも誰でもアクセスできます。早めに然るべき対処しないと、大変なことになりますよ。
momon-ga

2020/07/02 04:58

要素1個の連想配列に、HTMLタグ全部ぶっこんでforeachで、それ出力すれば、題意は満たせるよね。
m.ts10806

2020/07/02 14:45

momon-gaさん <table>タグ だけあればOKですよ。
guest

回答6

0

効果測定とは、これまでの学習の成果を確認するものであるはず。
ということは、これまで学習してきたことで解答が可能であるものでなければなりません。
そのままは載っていなくても組み合わせれば出来たり、考え方は身に付いている前提であるものです。

つまり、この設問内容で、何一つ分からないということは

コードを見れば、理解できる

ということにはなりえません。

理解できた「気」になるだけです。
もしくはそれを言い訳にして答えだけを欲している丸投げかのどちらかです。

後者でないことを願うばかりですが、いかんせん後者(非推奨質問、ルールもマナーもない質問者)が多くて信じきれない部分は回答者やっているとどうしてもあります。

まぁ、まずは過去の学習内容を見返すところからでしょう。

プログラミングは
1+1=○を解くのではなく
○+△=2を解くものです。*

つまり、1つのゴールに対してルートは1つではない、
無限に近いルートが考えられるわけです。*

考えましょう。

答えだけを得たところで、身に付きません。


*つまり、ゴールを決めてようやく手法が決まるもの。要件定義もなしにまともな実装はできない。

追記:「効果測定の結果」としては「何も手がつかない」のが事実なので、それはそれで白紙で出してもいいんじゃないでしょうか。カリキュラムの見直しを検討する必要があるなら、講師にとっては前向きなフィードバックです。
(あくまでちゃんと講義を受けていることが前提)

投稿2020/07/01 13:56

編集2020/07/01 14:03
m.ts10806

総合スコア80875

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

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

satou_2897

2020/07/01 14:06

そんな効率の悪いことなんてやってられませんよ、 テキストを読むより、問題の答えから学ぶことの方が多いと思いますが? まぁいいですよ、おら、こんな効率の悪いやり方は嫌いだ
m.ts10806

2020/07/01 14:20

それは効率ではなく、ただの怠慢です。もとよりちゃんと講義受けていればこのような質問をすることもなく、指摘されることもなく、自分で出来ているのでは。 赤の他人に質問することはむしろ非効率ですね。聞くなら講師へ。
m.ts10806

2020/07/01 14:30

ひとつ言い忘れましたが、teratailではこの手の質問は非推奨です。 どう見ても課題、宿題代行の丸投げ質問なので、あまりまともな回答がつく期待はされないほうが良いです。 むしろ、この質問文を作るための労力を課題に回した方が、幾らか効率的に進むでしょう。それくらいの内容です。 書かないプログラムは動かないし効果測定レベルの課題に全部書いてもらったプログラムは何の学習効果もありません。
Take_it

2020/07/02 00:41

横から失礼します。 質問者さん、どうかプログラミング学習は諦めて、決してこの業界に来ないでください。お願いします。 人手は足りていない業界ではありますが、貴方みたいな考え方の人がきても、周囲の足を引っ張るだけです。 断言します。貴方は向いていません。
m.ts10806

2020/07/02 01:37

課題こなしたいだけじゃないかなと まあ、それならなおのこと、ここで聞くべきじゃないですけどね
miyabi_takatsuk

2020/07/02 02:41

> そんな効率の悪いことなんてやってられませんよ 回り道に見えているんでしょうか? そうだとしたら、質問者さんが行こうとしてる真っ直ぐな道は、 道の真ん中に落とし穴がある、ゴールにたどり着けない道です。
phper.k

2020/07/02 14:37

> そんな効率の悪いことなんてやってられませんよ、 そうですよねー。 学ぶ気のない人に答えくれてやるのはもっと効率が悪いので、御退場ください。
m.ts10806

2020/07/03 13:38 編集

質問者さんへ。 4つも提示の要件を満たしたコードが出そろいましたが、どうしますか? 「問題の答え」は本来講師が持っているでしょうし、これまで学習した内容から出来る範囲でしょうけど、 我々は講師でもないし提示された要件を単に満たすだけの面白コードを作っています。 本当にこれでプログラミング自体の学習として得られるものはあるんでしょうか。 自身が半分も理解できないならそれは何も得るものはありません。 自身が遠回りだと感じようと、基礎から地道にやっていくしかないのです。王道はありません。 別にプログラミングを嫌いになってほしいからこういうことをやってるわけじゃなく、 やろうとしたら幾らでも実現手段が考えられるということ そして、「思ったような答えを得たい」なら要件をより詳細に、間違いなく想定内の答えが得られるように記載することです。 プログラムは書いたようにしか動かないのと同じく、要件も書いたようにしか伝わらず、書いてないことは勝手な解釈がどんどん入ってきます。 「解釈をさせない」のも出題者の務めでしょう。 老婆心ながら、今回提示された回答のコードはそのまま提示しても確実に怒られます。 怒られるだけで済むならまだマシな方かもしれません。 だから「わざと難解な作り」をするのです。質問内容から質問者の技量を予測し、質問者が手を出しにくいように。 技術自慢ではなく、あくまで「大喜利」としてね。 遊ばれたと思ってもらっても結構です。でも、この質問内容と質問者さんのスタンスでは teratailでは誰もまともに相手をしないでしょう。 ちなみに、本当にこのまま課題を提出したとして、何かあっても回答者の責任は問えません。 あなたの課題なのですから、あなたの責任しかないですし、あなた自身のコードとして責任を全うしてください。 ※つまり責任持てないコードを書くな、持ってくるなということ
Take_it

2020/07/04 02:02 編集

m.ts10806さん、優しいなぁ。 自分は > そんな効率の悪いことなんてやってられませんよ この一言だけで諦めて突き放しましたが。。 m.ts10806さんの優しさが質問者さんに届いて、改心されることを期待します。 もしこれを「めんどくせーな」としか受け取れないようであれば、本当にプログラミング学習はやめたほうがいい(いや他の分野でも周りに迷惑かけまくるだろうからプログラミングだけに限った問題ではないか) #まぁでもこの手の質問は定期的に発生してるし、大喜利回答眺めてるとある意味発想の柔軟性を鍛えるいい教材な気もしてきます。
m.ts10806

2020/07/04 02:05

Take_itさん いえ、試してるだけですよ。 所詮赤の他人同士、ある程度触れてみないと分からないことの方が多いです。 今回でどこまでの気づきを得られるかどうかで今後の対応を検討します。
guest

0

連想配列と foreach を利用して、文字列加工を中心にコードを組み上げてみました。
流石に全部回答するのはアレなので、table の style の調整は残しています。
参考になれば。

php

1<?php 2$origin = [ 3 "title" => "和風月名(わふうげつめい) | 日本の暦", 4 "url" => "https://www.ndl.go.jp/koyomi/chapter3/s8.html", 5 "sourc" => "国立国会図書館ウェブサイトより", 6]; 7$page = file_get_contents($origin["url"]); 8preg_match("/<table[\S\s]*?</table>/u", $page, $table); 9$table = $table[0]; 10preg_match_all("/<td>.*?</td>/u", $table, $del_td); 11preg_match_all("/(<br />\n|)(.*?)/u", $table, $del_kana); 12preg_match_all("/<caption>.*?</caption>/u", $table, $del_caption); 13preg_match('/<tr> 14<td class=\"season\">7月[\S\s]*</tr>/u', $table, $del_tr); 15$del_lists = array_merge($del_tr, $del_td[0], $del_kana[0], $del_caption[0]); 16foreach($del_lists as $del_list){ 17 $table = str_replace($del_list, "", $table); 18} 19$th_org = '<th scope="col" class="word">旧暦の月</th> 20<th scope="col">和風月名</th> 21<th scope="col">由来と解説</th> 22'; 23$th_rep = '<th scope="col">月</th><th scope="col">旧暦の月名</th>'; 24$table = str_replace($th_org, $th_rep, $table); 25echo $table;

投稿2020/07/01 23:02

編集2020/07/01 23:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2020/07/01 23:30

始まってしまった。大喜利が。
退会済みユーザー

退会済みユーザー

2020/07/02 00:09

いやぁ。優勝だと思いますよw この回答の起点は「テキストを読むより、問題の答えから学ぶことの方が多い」のか?です。 なので、答え(国立国会図書館の「和風月名(わふうげつめい) | 日本の暦」)から、課題回答を抽出してみました。 必須要件(foreach, 連想配列)が邪魔してますが、そこそこ効率は良さそうです。 ただ、この方法の場合、”テキスト”を読まないってのは無理なようです。 どちらかと言うと、ガッツリ読み込んでます。
miyabi_takatsuk

2020/07/02 03:30

> この回答の起点は「テキストを読むより、問題の答えから学ぶことの方が多い」のか?です。 この問題提起からの発想とは・・・。 さすが深いです。 学校からの課題で解いて欲しい部分は解決してませんからね。 質問者さん、そこに気づけるか・・・。
guest

0

正直ロジックは簡潔な方かと。。
仕様としては、配列$aryに1月、2月、3月、、、に対応する様に旧暦の月名が入っています。
今回使用した配列は連想配列ではないなのですが、キーが0からの連番で割り振られることを利用して以下の関係式を利用しました。
キー + 1 = 旧暦の月名の月
(キーなんか使わなくてもループで1足していけばいいじゃんと思う方もいることと思いますが、配列を理解してるんだということを先生に間接的に伝えるためのものだと思ってください。)

補足
この配列を理解できるのであれば、連想配列にすることは簡単なはずです。
コードを見れば理解できると記載されていましたので、連想配列にするところはご自身で

PHP

1<?php 2$ary = ["睦月", "如月", "弥生", "卯月", "皐月", "水無月",]; 3?> 4 5<table border="1" style="border-collapse: collapse"> 6 <tr> 7 <th></th> 8 <th>旧暦の月名</th> 9 </tr> 10 <?php foreach ($ary as $key => $value) { ?> 11 <tr> 12 <td><?=++$key.'月' ?></td> 13 <td><?=$value ?></td> 14 </tr> 15 <?php } ?> 16</table>

投稿2020/07/04 17:57

編集2020/07/05 17:44
kai0310

総合スコア2076

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

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

kai0310

2020/07/04 18:11

この回答は本質問投稿日(投稿 2020/07/01 22:50)から一定期間が経過し、提出期限は過ぎたと仮定し回答したものであり、"学校からの課題を解く"という行為を手助けしたものではありません。
guest

0

要件:

連想配列とforeach文を利用して、レイアウトのとおりテーブルを作成するこ

<table>タグの利用が必要となります
  • PHP
  • 連想配列とforeachを使う
  • 図のレイアウトを作成する
  • tableタグを使う
  • PHPのバージョン自由
  • 実行の方法は自由
  • tableタグと連想配列とforeachが利用してあればあとはどんな手法を使ってでも図を再現すれば良し
  • 要件さえ満たせていればコードの可読性は不問
  • 仕様変更の考慮は不要 ←New

という
非常に自由度の高く多種多様な解釈が可能なお題のようなので、作ってみました。

※質問者がどういうテキストで講義を受けてきたのか知りませんし全く考慮してません
※質問者の今後は全く考慮してません
※出オチ

php

1<?php 2define('PE',PHP_EOL);define('T',true);define('F',false);define('H','H');define('A','A');define('J','J');define('JM','JM');define('C',[H,A,J,JM]); 3class e{private $s;function __construct($s){$this->s=$s;}function o(){echo $this->s;}} 4function e($s){if(in_array($s,C)){return;}else{$e=new e($s);$e->o();}} 5$r = [ 6 '┏' => ['━','━','━','━','━','┯','━','━','━','━','━','━','━','┓' ], 7 '┃' => ['H',' ',' ','月',' ',' ','│',' ','旧','暦','の','月','名',' ','┃'], 8 '┠' => ['─','─','─','─','─','┼','─','─','─','─','─','─','─','┨'], 9 '' => ['┃','A',' ',' ','1','月',' ',' ','│','J',' ',' ',' ','睦','月',' ',' ',' ','┃' 10 ,PE,'┠','─','─','─','─','─','┼','─','─','─','─','─','─','─','┨' 11 ,PE,'┃','A',' ',' ','2','月',' ',' ','│','J',' ',' ',' ','如','月',' ',' ',' ','┃' 12 ,PE,'┠','─','─','─','─','─','┼','─','─','─','─','─','─','─','┨' 13 ,PE,'┃','A',' ',' ','3','月',' ',' ','│','J',' ',' ',' ','弥','生',' ',' ',' ','┃' 14 ,PE,'┠','─','─','─','─','─','┼','─','─','─','─','─','─','─','┨' 15 ,PE,'┃','A',' ',' ','4','月',' ',' ','│','J',' ',' ',' ','卯','月',' ',' ',' ','┃' 16 ,PE,'┠','─','─','─','─','─','┼','─','─','─','─','─','─','─','┨' 17 ,PE,'┃','A',' ',' ','5','月',' ',' ','│','J',' ',' ',' ','皐','月',' ',' ',' ','┃' 18 ,PE,'┠','─','─','─','─','─','┼','─','─','─','─','─','─','─','┨' 19 ,PE,'┃','A',' ',' ','6','月',' ',' ','│','JM',' ',' ','水','無','月',' ',' ','┃' 20 ,PE,'┗','━','━','━','━','━','┷','━','━','━','━','━','━','━','┛' ] 21]; 22$f=(php_sapi_name()==='cli')?T:F;$cs=''; 23if (! $f) {e('<!DOCTYPE html><html><head><title>from teratail</title><style>*{line-height:1;}span{display:inline-block;}span.H{padding-left:8px;padding-right:8px;}span.A{padding-left:6px;padding-right:6px;}span.J{padding-left:6.65px;padding-right:6.65px;}span.JM{padding-left:8px;padding-right:8px;}</style></head><body><table><tbody><tr><td>');} 24foreach ($r as $k => $v) {e($k); 25 foreach ($v as $c) { 26 if ($f) {e($c); } else { if(empty($cs)){$cs=(in_array($c,C))?$c:'';}else{ (in_array($c,C))?$cs=$c:'';} 27 if ($c === PE) { e('<br />');} else if (ctype_space($c)||$c===' ') {e('<span class='.$cs.'></span>');} else {e($c);}} 28 }if($f){e(PE);}else{e('<br />');}} 29if (!$f){e('</td></tr></tbody></table></body></html>');} 30 31

ちなみに次点:

php

1<?php 2foreach(["a"=>"b"]as$c){} 3?> 4<table><td><img src="hoge.png"></td></table>

投稿2020/07/02 14:35

編集2020/07/02 14:49
m.ts10806

総合スコア80875

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

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

m.ts10806

2020/07/02 14:41

次々点: PHPから別の言語叩いて印刷
kai0310

2020/07/02 14:46

保守・データを追加する時は大変そうですね笑
m.ts10806

2020/07/02 14:48

おっと、そこを書くのを忘れていた。
m.ts10806

2020/07/02 15:00

7~12月追加くらいなら2行ずつコピペしていって文言変更だけでいけると思います(未検証)
kai0310

2020/07/02 17:38

こんな配列の使い方があったのですね! やはり奥深いです。。故に楽しいのですが笑
m.ts10806

2020/07/02 22:37

いえいえ。(主にWeb側の調整のせいで)2時間近くかかったゴミコードですよ。 まあ、自身が講師でこのコードを理路整然と説明されたら満点だします。むしろ今後の講義のいくつかを任せます。
guest

0

php

1<?php 2$incr = array( 3 'target' => 'months', 4 'initmodel' => '<tr> 5 <th>月</th> 6 <th>旧歴の月名</th> 7 </tr>' 8); 9 10$months = array( 11 '睦月', 12 '如月', 13 '弥生', 14 '卯月', 15 '皐月', 16 '水無月' 17); 18 19?> 20 21<table id="<?php echo $incr['target']; ?>"> 22<?php echo $incr['initmodel']; ?> 23</table> 24 25<script> 26const monthTable = document.getElementById('<?php echo $incr['target']; ?>'); 27const insertFunc = (index, month) => { 28 const row = monthTable.insertRow(); 29 row.insertCell().textContent = `${index + 1}`; 30 row.insertCell().textContent = month; 31}; 32 33<?php foreach($months as $i => $month) { ?> 34insertFunc(<?php echo $i; ?>, <?php echo $month; ?>); 35<?php } ?> 36</script>

投稿2020/07/02 03:08

編集2020/07/02 03:54
miyabi_takatsuk

総合スコア9555

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

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

miyabi_takatsuk

2020/07/02 03:09

は、大喜利のつもりが、 JS使ってるってだけで、 課題の意図としては、多分正解になってしまった。
m.ts10806

2020/07/02 03:32

「連想配列」ではないような
miyabi_takatsuk

2020/07/02 03:55

気付いて無理くり使いました。 (課題の意図に沿ってないですけど)
m.ts10806

2020/07/02 14:39

「課題の意図」が提示されてないから、OKですよ。
kai0310

2020/07/02 14:44

教師がこのコードを見たときの様子が気になります。
miyabi_takatsuk

2020/07/02 17:03

m.ts10806さん > 連想配列を使って、としか書いてないですもんね 苦笑 k011510さん > 先「いや、確かに項目クリアしてっけど、うーん 汗」 って反応期待w
guest

0

なんか。いい案思いつかないので。

PHP

1<?php 2$numbers = [ 3 1, 2, 3, 4, 5, 6 4]; 5 6foreach($numbers as $number){ 7 if(!isset($random)){ 8 $random = ''; 9 } 10 $random .= random_bytes(10000000000); 11} 12 13foreach($numbers as $number){ 14 if(!isset($monthes)){ 15 $monthes = ''; 16 } 17 $monthes .= $number . "月" . $random; 18} 19 20foreach($numbers as $number){ 21 if(!isset($japanese)){ 22 $japanese = ''; 23 } 24 $japanese .= (( $number == 1 ) ? '睦月' : (( $number == 2 ) ? '如月' : (( $number == 3 ) ? '弥生' : (( $number == 4 ) ? '卯月' : (( $number == 5 ) ? '皐月' : (( $number == 6 ) ? '水無月' : 'こんな数字知らね' )))))).$random; 25} 26 27echo '<table>'; 28foreach($numbers as $number){ 29 echo '<tr>'; 30 echo '<td>'.explode($random, $monthes)[$number-1].'</td>'; 31 echo '<td>'. explode($random, $japanese)[$number-1].'</td>'; 32 echo '</tr>'; 33} 34echo '</table>';

投稿2020/07/03 02:41

編集2020/07/03 02:59
kyoya0819

総合スコア10429

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

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

kyoya0819

2020/07/03 02:41

いい点:程よく汚い。
kyoya0819

2020/07/03 02:43

授業中で30分程度で書いた適当なコードです。
miyabi_takatsuk

2020/07/03 02:44

これはいいですねw なんか初学者っぽい青臭さを感じました。
kyoya0819

2020/07/03 02:45 編集

hogehogehogehogeがお気に入りです。
kyoya0819

2020/07/03 02:46

あー、ちょっとhogehogehogehogeはダメかもですね。。。
kyoya0819

2020/07/03 02:49

熟練さ臭を出してみました。。。
miyabi_takatsuk

2020/07/03 02:57 編集

三項演算の改行とってワンライナーにしたのが素敵ですねw なぜかランダム使うのもオシャレです。
kyoya0819

2020/07/03 02:59

見間違えてました、、修正しました。
m.ts10806

2020/07/03 03:01

あれ?と思って調べたのはナイショ。 しかしrandom_bytesがいい味だしてますね
kyoya0819

2020/07/03 03:08 編集

本当は、文字列型の最大を攻めたかったのですが、引数が定められないので諦めました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問