
連想配列からテーブル(<th>テーブルヘッダ項目を含む)を作成する関数を作ろうと思っています。
配列と関数をどのように書けばHTMLのソースのようになるでしょうか?
値によって、<td>と<th>を振り分けるようになど良い方法を教えてください。
(1.できれば配列で<td> </td>は省略したいと思います。)
(2.<th> </th>の指定場所は下のhtmlのように縦とか横とかにに変えられた方が良いです。)
//----- 関数 -----
function table($v) {
}
//----- 配列 -----
$s = array();
$s[0] = array( 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' );
$s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' );
$s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' );
$s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' );
$s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' );
table($s);
//----- 生成されるhtml -----
<table>
<tr><th>A-1</th><th>B-1</th><th>C-1</th><th>D-1</th><th>E-1</th></tr>
<tr><td>A-2</td><td>B-2</td><td>C-2</td><td>D-2</td><td>E-2</td></tr>
<tr><td>A-3</td><td>B-3</td><td>C-3</td><td>D-3</td><td>E-3</td></tr>
<tr><td>A-4</td><td>B-4</td><td>C-4</td><td>D-4</td><td>E-4</td></tr>
<tr><td>A-5</td><td>B-5</td><td>C-5</td><td>D-5</td><td>E-5</td></tr>
</table>
<table>
<tr><th>A-1</th><td>B-1</td><td>C-1</td><td>D-1</td><td>E-1</td></tr>
<tr><th>A-2</th><td>B-2</td><td>C-2</td><td>D-2</td><td>E-2</td></tr>
<tr><th>A-3</th><td>B-3</td><td>C-3</td><td>D-3</td><td>E-3</td></tr>
<tr><th>A-4</th><td>B-4</td><td>C-4</td><td>D-4</td><td>E-4</td></tr>
<tr><th>A-5</th><td>B-5</td><td>C-5</td><td>D-5</td><td>E-5</td></tr>
</table>
//----- 考え中??の配列 -----
$s = array();
$s[0] = array( '<th>A-1</th>' , '<th>B-1</th>' , '<th>C-1</th>' , '<th>D-1</th>' , '<th>E-1</th>' );
$s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' );
$s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' );
$s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' );
$s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' );
table($s);
$s = array();
$s[0] = array( 'th' => 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' );
$s[1] = array( 'th' => 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' );
$s[2] = array( 'th' => 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' );
$s[3] = array( 'th' => 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' );
$s[4] = array( 'th' => 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' );
table($s);
//----- 参考中のソース -----
//-- http://oshiete.goo.ne.jp/qa/8107250.html
function table($v) {
echo '<table>';
foreach ($v as $t1) {
echo '<tr>';
foreach ($t1 as $t2) {
echo '<td>' . $t2 . '</td>';
}
echo '</tr>';
}
echo '</table>';
}
No.2ベストアンサー
- 回答日時:
配列のキーを元に処理をすればよいかと
<?PHP
$s = array(
array('A-1','B-1','C-1','D-1','E-1')
,array('A-2','B-2','C-2','D-2','E-2')
,array('A-3','B-3','C-3','D-3','E-3')
,array('A-4','B-4','C-4','D-4','E-4')
,array('A-5','B-5','C-5','D-5','E-5')
);
$t1="<table>\n";
foreach ($s as $row){
$t1.="<tr>\n";
foreach($row as $key_1=>$val){
if($key_1==0){
$t1.="<th>".htmlspecialchars($val)."</th>\n";
}else{
$t1.="<td>".htmlspecialchars($val)."</td>\n";
}
}
$t1.="</tr>\n";
}
$t1.="</table>\n";
$t2="<table>\n";
foreach ($s as $key_0=>$row){
$t2.="<tr>\n";
foreach($row as $val){
if($key_0==0){
$t2.="<th>".htmlspecialchars($val)."</th>\n";
}else{
$t2.="<td>".htmlspecialchars($val)."</td>\n";
}
}
$t2.="</tr>\n";
}
$t2.="</table>\n";
print $t1;
print $t2;
場合によっては、カウンタを使う方が有効かもしれません
No.4
- 回答日時:
#2です。
蛇足。データベースなどから取り出す場合はこんな感じで処理する方が
わかりやすいですね
<?PHP
$s = array(
array('A-1'=>'A-2','B-1'=>'B-2','C-1'=>'C-2','D-1'=>'D-2','E-1'=>'E-2')
,array('A-1'=>'A-3','B-1'=>'B-3','C-1'=>'C-3','D-1'=>'D-3','E-1'=>'E-3')
,array('A-1'=>'A-4','B-1'=>'B-4','C-1'=>'C-4','D-1'=>'D-4','E-1'=>'E-4')
,array('A-1'=>'A-5','B-1'=>'B-5','C-1'=>'C-5','D-1'=>'D-5','E-1'=>'E-5')
);
$t="<table>\n";
$t.="<thead>\n";
foreach (array_keys($s[0]) as $val){
$t.="<th>".htmlspecialchars($val)."</th>\n";
}
$t.="</thead>\n";
$t.="<tbody>\n";
foreach ($s as $row){
$t.="<tr>\n";
foreach($row as $key_1=>$val){
$t.="<td>".htmlspecialchars($val)."</td>\n";
}
$t.="</tr>\n";
}
$t.="</tbody>\n";
$t.="</table>\n";
print $t;
?>
単に連想配列であれば1行目と2行目以降のキーが同等である保証はありませんが
データベースなどからの抽出であれば同等のデータとなるはずなので・・・
No.3
- 回答日時:
昔、同じようなの書いた事あるので、今回のに合わせて修正したのをあげてみます。
<?php
$s = array();
$s[0] = array( 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' );
$s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' );
$s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' );
$s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' );
$s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' );
print table($s , "tate");
print table($s , "yoko");
//--------------------------------------------
function table($s , $xy) {
$out = "";
foreach($s as $y => $arrX) {
$out.= "<tr>";
foreach($arrX as $x => $dat) {
$out.= XY($x , $y , $xy , $dat);
}
$out.= "</tr>";
}
$out = "<table border=1>$out</table>";
return($out);
}
function XY($x , $y , $xy , $dat) {
$dat = htmlspecialchars($dat);
if ($xy == "tate") {
$dat = ($x == 0) ? TH($dat) : TD($dat);
} else {
$dat = ($y == 0) ? TH($dat) : TD($dat);
}
return($dat);
}
function TD($str) { return("<td>" . $str . "</td>"); }
function TH($str) { return("<th style='background-color:cornsilk;'>" . $str . "</th>"); }
//--------------------------------------------
?>
むやみやたらと関数にしてたり、色々アレですが。
No.1
- 回答日時:
「配列の最初の要素」をthで展開してよければこんな感じですかね・・・
<?php
$s = array();
$s[0] = array( 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' );
$s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' );
$s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' );
$s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' );
$s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' );
print table($s);
function table($arg) {
if (!is_array($arg)) { return false; }
$ret = '';
$ret .= '<table>' . PHP_EOL;
$td = 'th';
foreach ($arg as $line) {
if (!is_array($line)) { continue; }
$ret .= '<tr>' . PHP_EOL;
foreach ($line as $item) {
$ret .= '<' . $td . '>' . htmlspecialchars($item, ENT_QUOTES) . '</' . $td . '>' . PHP_EOL;
}
$ret .= '</tr>' . PHP_EOL;
$td = 'td';
}
$ret .= '</table>' . PHP_EOL;
return $ret;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- 工学 【制御工学】単位ステップ応答の遅れ時間の求め方(令和2年度の機械設計技術者試験(制御工学)の問題) 3 2022/11/02 10:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pager::factory()の使い方がわ...
-
行列
-
配列の比較
-
Tableの背景色を交互に変えたい
-
ランダムの比較について
-
array_uniqueについて
-
正規表現
-
重複する文字を1つにするには?
-
MySQLのデータをPHPで多次元...
-
MYSQLとPHPによって取得する多...
-
多次元配列をエンコードする関...
-
配列の要素(value)に、変数を...
-
C言語の配列をPush(追加)する...
-
多次元配列からxmlツリーを作成...
-
MySQLから受け取ったデータを連...
-
前のページで入力したものをあ...
-
php 2つの配列の内、片方を元に...
-
ファイルの逆読みってできますか?
-
AならBを読み込む場合
-
連想配列からの値の取り出し
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
行列
-
CArrayの要素としてCStringArra...
-
Texでの数式
-
読み(あ行~わ行)ごとに分け...
-
CArrayのソート
-
C言語 最大値と最小値を求めて...
-
fgetc関数について
-
PHPのmin関数、「1」以上の数値...
-
連想配列の文字コードを変換
-
STLのvectorで作った配列をメン...
-
C言語のchar ポインタ
-
C言語で全角文字の扱いについて
-
配列を指定した順序でソート
-
php で1から100までの素数の表...
-
delphi 2次元配列がわかりません
-
np.stack()とnp.array()の違い
-
array_intersectで空欄を比較し...
-
cakephpでのトランザクション処...
-
verilogで、配列の一部をタスク...
おすすめ情報