連想配列からテーブル(<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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
in_array関数について
-
特定の文からメールアドレスの...
-
配列から表の生成
-
濁点のソート
-
$arrN[0] = $arrN[1] = $arrN[2...
-
かなでの並び替え
-
C言語 最大値と最小値を求めて...
-
array_intersectで空欄を比較し...
-
phpのエラーについて
-
多次元配列をエンコードする関...
-
読み(あ行~わ行)ごとに分け...
-
HTML_QuickFormのAdvCheckBox ...
-
PHPで配列から値を取得したい
-
PHPのmin関数、「1」以上の数値...
-
配列の要素(value)に、変数を...
-
fgetc関数について
-
CSVでアップロードしたデータの...
-
Resource id #3 と表示されま...
-
String だと「 ByRef引数の型が...
-
file_existsでファイル名の部分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の要素(value)に、変数を...
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
CArrayの要素としてCStringArra...
-
verilogで、配列の一部をタスク...
-
System.String.Splitでエラー
-
Perlで重複行を削除したい
-
行列
-
C言語 最大値と最小値を求めて...
-
スカラーのベクトル微分
-
PHPで2次元配列を1次元配列に...
-
array_intersectで空欄を比較し...
-
mallocで char *型の配列を確...
-
Pascalの手続きについて
-
複数のforeachをまとめるには
-
数独かを判断するプログラム
-
ソートの名称について
-
PHPのmin関数、「1」以上の数値...
おすすめ情報