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

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

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

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

Q&A

解決済

1回答

513閲覧

<tr>が2つ目以降は<td rowspan="17">固定で出力したいです

nanashissss

総合スコア60

PHP

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

0グッド

0クリップ

投稿2022/08/30 09:01

編集2022/08/31 00:45

複数のtableデータを連想配列で出力したいのですが、
一部のtableデータがrowspanで17結合されていて、<tr>2つ目以降は<td rowspan="17">固定で出力したいです

$hogelist = [ 'hoge1' => [ 'hoge1' => 'hoge' ], 'hoge2' => [ 'hoge1' => 'hoge' ], 'hoge3' => [ 'hoge1' => 'hoge' ], 'hoge4' => [ 'hoge1' => 'hoge' ], ]; $hogelist2 = [ 'hoge1' => [ 'hoge1' => 'hoge' ], 'hoge2' => [ 'hoge1' => 'hoge' ], 'hoge3' => [ 'hoge1' => 'hoge' ], 'hoge4' => [ 'hoge1' => 'hoge' ], ];

PHP

<table class="tbl_time_1"> <?php foreach($navlist['hoge1'] as $key=>$vals):?> <tbody> <tr> <td> <?php echo $vals ?> </td> <?php endforeach; ?> </tr> </tbody> </table> <table class="tbl_time_1"> <tbody> <?php foreach ($hogelist2 as $key=>$data) :?> <tr> <?php printf('<th>%s</th>', $key); ?> <?php foreach($data as $val) printf('<td>%s</td>', $val);?> <?php endforeach; ?> </tr> </tbody> </table>

html

<table class="tb_1"> <tbody> <tr> <th>テキスト</th> <td>テキスト</td> <td>テキスト</td> <td>テキスト</td> </tr> <tr> <th>テキスト</th> <td>テキスト</td> <td rowspan="17">テキスト</td> <td rowspan="17">テキスト</td> </tr> <tr> <th>テキスト</th> <td>テキスト</td> </tr> </tbody> </table>

修正
見出しになるtheadのtr以降は3列、4列目はthの分だけ自動的にrowspanが増えていければいい感じなんですが

<table class="tb_1"> <thead> <tr> <th>hoge</th> <td>hoge</td> <td>hoge</td> <td>hoge</td> </tr> </thead> <tbody> <tr> <th>hoge</th> <td>hoge</td> <td rowspan="4">hoge</td> <td rowspan="4">hoge</td> </tr> <tr> <th>hoge</th> <td>hoge</td> </tr> <tr> <th>hoge</th> <td>hoge</td> </tr> <tr> <th>hoge</th> <td>hoge</td> </tr> </tbody> </table>

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

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

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

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

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

yambejp

2022/08/31 00:31

配列とテーブルのサンプルが違いすぎて、なにから何をどういうロジックで得たいのかわかりません。 とりあえず質問時はrowspanも17ではなく3~4くらいに簡易化して、 再度サンプルを提示ください
nanashissss

2022/08/31 00:46

申し訳ございません HTMLのソースコードを修正しました。
guest

回答1

0

ベストアンサー

ご提示のテーブルは行数がたりなくてrowspanがあふれていて不整合です

sample

こういうことをしたいのでしょうか?
元データの持ち方と、条件次第です

PHP

1<?PHP 2$list = [ 3 ['col1'=>1,'col2'=>2,'col3'=>3,'col4'=>4], 4 ['col1'=>5,'col2'=>6,'col3'=>7,'col4'=>8], 5 ['col1'=>9,'col2'=>10], 6 ['col1'=>11,'col2'=>12], 7 ['col1'=>13,'col2'=>14], 8 ['col1'=>15,'col2'=>16], 9 //以下略 10 ]; 11 12print "<table border>\n"; 13foreach($list as $key1=>$row){ 14 print "<tr>\n"; 15 foreach($row as $key2=>$val){ 16 $rowspan=($key1==1 and in_array($key2,["col3","col4"]))?" rowspan=17":""; 17 print "<td{$rowspan}>{$val}</td>\n"; 18 } 19 print "</tr>"; 20}

配列の個数で自動的に

以下例だと$listの行数-1がcolspanの値になると思います。
ついでに先頭列がthだったのを忘れていたので処理を入れておきました

PHP

1<?PHP 2$list = [ 3 ['col1'=>1,'col2'=>2,'col3'=>3,'col4'=>4], 4 ['col1'=>5,'col2'=>6,'col3'=>7,'col4'=>8], 5 ['col1'=>9,'col2'=>10], 6 ['col1'=>11,'col2'=>12], 7 ['col1'=>13,'col2'=>14], 8 ['col1'=>15,'col2'=>16], 9 ]; 10 11print "<table border>\n"; 12foreach($list as $key1=>$row){ 13 print "<tr>\n"; 14 foreach($row as $key2=>$val){ 15 $tag=$key2=="col1"?"th":"td"; 16 $rowspan=($key1==1 and in_array($key2,["col3","col4"]))?" rowspan=".(count($list)-1):""; 17 print "<{$tag}{$rowspan}>{$val}</{$tag}>\n"; 18 } 19 print "</tr>"; 20}

投稿2022/08/31 00:22

編集2022/08/31 01:45
yambejp

総合スコア114883

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

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

nanashissss

2022/08/31 00:27

省略してて、thが2個目以降17項目あります。
nanashissss

2022/08/31 01:36

ありがとうございます。 ちなみにrowspan=17を固定ではなく、配列の個数で自動的にすることできますか?
yambejp

2022/08/31 01:46

諸々調整して追記しておきました
nanashissss

2022/08/31 03:52

度々ありがとうございます。 実現したいことができました。 一点だけ、下記コードは例なんですが、連想配列のキー毎に出力することは難しいですよね? tableがある分だけ配列も用意しないとダメですかね? $navlist = [ 'globalNavi' => [ 'xxxx', 'xxxx', ], 'xxxx' => [ 'xxxx', 'xxxx', ] ]; <ul> <?php foreach($navlist['globalNavi'] as $key=>$vals):?> <li><?php echo $vals ?></li> <?php endforeach; ?> </ul>
yambejp

2022/08/31 03:57

> tableがある分だけ配列も用意しないとダメですかね? ごめんなさい、何をしたいか伝わってきません
nanashissss

2022/08/31 04:07 編集

すみません。あまりPHP得意でなく。 配列(table)を増やす場合は下記みたいにしないとダメですよね。との確認でした。 調べたら連想配列のキーごとに出力する方法もある感じでしたので。 $list = [ ]; $list2 = [ ]; $list3 = [ ]; こんな連想配列です $listall{ 'xxxx1' => [ 'xxxx', 'xxxx', ] 'xxxx2' => [ 'xxxx', 'xxxx', ] }
yambejp

2022/08/31 04:09

テーブルの数だけリストを作る必要があるか?というご質問でしょうか? 内容が違うなら必要ですが、変数は一つにまとめることはできるでしょう 同じ内容であればリストは1つで十分です
nanashissss

2022/08/31 04:19

承知いたしました。 内容は違うのでその分だけ必要ですね。 長々とありがとうございます。 助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問