• 締切済み

フレームワークで、htmlが入り組んでいたコードを実装するには

以下のようなコードを、フレームワークを使って実装するにはどうしたらいいのでしょうか。 フレームワークはZendFrameworkです。 ※配列に入っているデータを表に出力しているだけです。 (列が少ない行は列の結合をしてます) このコードを、フレームワークのViewに落としたら、 MVCの考え方からは逸脱してしまうのでしょうか? Viewの中で、ループなどプログラムを組んでしまうのはおかしいですか? <html> <head> <title>test</title> </head> <body> <?php # 表に出力するデータ $t_array = array( array( 'a', 'b', 'c' ), array( 'd', 'e' ), array( 'f', 'g' ) ); $t_count = count($t_array); # データがあれば if ( $t_count ){ foreach ( $t_array as $t_value ){ # 各要素数が表の列になるので要素数を取得 $t_col_count[] = count($t_value); } # 今から作成する表の最大列数は$t_row_count[0] arsort($t_col_count,SORT_NUMERIC); print '<table border=1>'; foreach ( $t_array as $t_key => $t_value ){ print '<tr>'; print '<td>'.$t_key.'</td>'; $i = 1; $t_value_count = count($t_value); foreach ( $t_value as $t_key2 => $t_value2 ){ # 表の最大列数と、この行の最大列数が同じの場合 if ( $t_col_count[0] == $t_value_count ) { print '<td>'.$t_value2.'</td>'; } else { # この行の最大列数と、今の列数が同じ場合、列を結合する if ( $t_value_count == $i ){ $t_col = $t_col_count[0] - $i + 1; print '<td colspan='. $t_col. '>'. $t_value2. '</td>'; } else { print '<td>'.$t_value2.'</td>'; } } $i++; } print '</tr>'; } print '</table>'; } ?> </body>

  • karace
  • お礼率57% (134/234)
  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

ループくらいはいいと思いますよ。 <?php foreach ($list as $key => $val): ?> <td><?= $val ?></td> <?php endforeach; ?> Viewでは表示するだけ、なくらいにできるだけ変数を準備しておけばもっときれいになりますが そこらへんのさじ加減は費用対効果で。 もしくは、$valをオブジェクトで持っておいたり ヘルパーを使うなりでももう少しは美化できそうです。

karace
質問者

お礼

表示するのに必要な場合は仕方ないといったところですかね。 ありがとございました。

関連するQ&A

  • PHPの読解お願いいたします

    PHP初心者です。 環境 XAMPP1.7.0(最新) アパッチなど一括ダウンロード OS:ビスタ 多次元配列について以下のコードについて疑問があります。 ●の部分が疑問点となっております ~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <table border="2"> <tr> <th>都市名</th><th>最高気温</th><th>最低気温</th> </tr> <?php $data=array( array("東京",32,25), array("名古屋",28,21), array("大阪",27,20), array("京都",26,19), array("福岡",27,22), ) foreach($data as $city){ print "<tr>"; ● foreach($city as $value) print "<td>{$value}</td>"; ●● } print "</tr>"; ?> </table> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・ここで<tr>を持ってくる必然性がわかりません。 例えば print "<td>{$value}</td>"のコードの<td>の横に付けることでも可能ではないのしょうか? ●●・・foreachがネストになり、多次元配列となっています。 まず$dataを取得しそれぞれを$cityに格納、次のforeachで$cityに格納された1行目のarray("東京",32,25)を一つづつ$valueに格納していくのだとは思いますが、例えばこのforeachネストの一連の流れを以下のように1つのforeachで記載することがなぜエラーになるのか分かりません。 foreac($data as $city){ print "<tr><td>{$city}</td></tr>" } $cityの中にはarray("東京",32,25) array("名古屋",28,21), array("大阪",27,20),array("京都",26,19),array("福岡",27,22), が格納されているので、別にこれをネストして{$value}に格納しなくてもそのまま変数$cityのみで表を作成できるのではないかと思っています。 まあでもエラーが出ますので、私の考えに大きな誤りがあるわけですが、誤っている部分をご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php配列確認に関して

    $name = array( '0' => 'test', '1' => 'test1', '2' => 'test2', '3' => 'test4', '4' => array( '0' => 'e', '1' => 'r', '2' => 'y', '3' => 'i', ), ); foreach ($name as $key => $value) } print $value; } このうえの配列を確認したいのですが print $value;でやると 4がarrayとなってしまいます 4の中身を確認したいのですか foreachの下に何を書けばいいでしょうか?

    • ベストアンサー
    • PHP
  • PHPの多次元配列について

    HTMLでホームページを作れる以外はプログラムに関しほぼ素人です。 環境 XAMPP1.70(最新)にてアパッチなど一括ダウンロード PHP言語にて3×4の表で以下の数値を多次元配列にて作成しようと思っているのですが、当方初心者なもので、 以下のコード(細かい部分は省略しています)、特にforeachがネストになっている部分の処理の流れがいまいちよくわかりません ~~~~~~~~~~~~~~~~~~~~~~~~~ <table border=2> <th>都市名</th> <th>最高気温</th> <th>最低気温</th> <?php  $data=array( array("東京"32,25) array("名古屋",45,67) array("埼玉",32,67) array("大阪",86,34) ) foreach($data as $city){ print "<tr>"; foreach($city as $value){ print "<td>{$value}</td>"    ●1回目foreachからここまでの流れがいまいち分かりません } print "</tr>"; ?> ~~~~~~~~~~~~~~~~~~~~ 一つ目のforeachにて、配列$dataが指定されていますので外側の配列を処理していくと思うのですが、具体的にどういう順番で処理されていくのでしょうか。 またforeach()の中の"$cityが最終的に$valueに格納という形になっていますが、10~13行目のarray("東京",32,25)とどのような関係で処理されていっているのか教えていただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでの単語の出現回数表示

    単語 回数  I   1 am 1 a 4 boy 2 . 4 This 1 is 3 pen 1 That 1 desk 1 He 1         ↑ ずれてしまいますが回数と同じ行です。 と上のように出したいのですが何をすればいいのかがわかりません参考書等を見てforeachを使うことがわかったのですが使い方がいまいちよくわかりませんどうかお願いします! 自分なりにやってみたのが下です <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $str ="I am a boy.This is a pen.That is a desk.He is a boy."; $data = split(" ",$str); foreach($data as $tango) $count[tango]++; foreach($count as $tango => $value){ print "<tr><td align='center'>$tango</td>"; print "<td align='right'>$value</td></tr>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • array_values?

     すみません、初学者ですが、以下の式はどういう意味ですが?  foreach ($array as $i => $value) { unset($array[$i]);  }  特に、これ:$array as $i => $value は何?さっぱり分からない。  お願いします!

    • ベストアンサー
    • PHP
  • CakePHPの表の更新・追加・削除の方法について

    CakePHPを使用して開発を行っております。表の更新・追加・削除について質問させてください。 現在は以下のようして、更新・追加・削除を行っております。 ・html <tr> <td><input type="hidden" name="hoge[0][id]" value="10" ><input name="hoge[0][col_1]"></td><td><input name="hoge[0][col_2]"></td> </tr> <tr> <td><input type="hidden" name="hoge[0][id]" value="11" ><input name="hoge[1][col_1]"></td><td><input name="hoge[1][col_2]"></td> </tr> ・cake $this->request->dataで以下を取得して、 hoge=>array( 0=>array( 'id'=>10, 'col_1'=>'', 'col_2'=>'', ), 1=>array( 'id'=>11, 'col_1'=>'', 'col_2'=>'', ) ) ループで1レコードづつsave()しています。 foreach($this->request->data['hoge'] as $v){ $this->create();//初期化処理 $this->save($v);//save()はidの値が既にテーブルに存在すれば、update。存在しなければ、insertする。 } 表で行の削除の場合は、jsで論理削除用のカラムのvalueを変更して、レコードをhidden()しています。 表で行の追加は、非表示で用意している以下をjsで取得後、REPLACEを数値(表の行数+1)に置換して、表の最下部に追加しています。 <tr> <td><input name="hoge[REPLACE][col_1]"></td><td><input name="hoge[0][col_2]"></td> </tr> <tr> <td><input name="hoge[REPLACE][col_1]"></td><td><input name="hoge[1][col_2]"></td> </tr> 前置きが長くなりましたが、ここからが質問になります。 行追加の処理が、別で表を用意していて冗長のため改善したいと考えています。 対策として、表の最下部を取得してきて、数値部分をインクリメントして、表に追加するという案を考えたのですが、もっと良い方法があるような気がしています。(nameのつけ方などで何かないかなど) 表の更新・追加・削除でスタンダードな方法や、他の方がどのようにやっているのかを知りたいです。 どうぞよろしくお願いします。 ※ CakePHPのバージョン : 2.3 jQueryのバージョン : 1.7

    • 締切済み
    • PHP
  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

  • smartyのforeachの使い方?

    smartyについて教えてください。 mysqlのデータを繰り返し表示させたいのですが Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26 とエラーが出てしまい動作しません。 foreachの使い方がおかしいのかと思いマニュアルをみてみたのですが わかりませんでした。 どうすれば繰り返し表示できるようになるでしょうか? ---php--- $i = 0; $list = array(); while ($col = mysql_fetch_array($res, MYSQL_ASSOC)) { $list[$i]['id'] = $col[id]; $list[$i]['title'] = $col[title]; $list[$i]['main'] = $col[main]; $i++; } $smarty->assign('list', $list); ---tpl--- {foreach item=list from=$list} <tr> <td>{$list.id}</td> <td>{$list.title}</td> <td>{$list.main}</td> <td><a href="hoge.php?id={$list.id}">a</a></td> <td><a href="hoges.php?id={$list.id}">a</a></td> </tr> {/foreach}

    • ベストアンサー
    • PHP
  • テーブルへの挿入と削除

    PHPにて追加を押すと、テーブルの最終リストに 「番号(1から連番)・商品名(プルダウン)・数量入力欄(text)・削除ボタン」 が挿入され、削除ボタンを押すと行が削除されるようにしたいのですが、今の状態ですと削除ボタンを押した場合、無条件に最終リストが 削除されてしまいます。 どうにかして削除ボタンを押した行が削除される様にしたいのですが? ↓現在のソース 最初0から始まり追加を押すと+1、削除を押すと-1。それをhiddenに与えその値の数だけ行を作成するようにしました。 $button=$_POST["add"]; if($button=="追加”){ $NOO=$NO+1; }else if($button=="削除"){ $NOO=$NO-1; } print "<input type=hidden name=NO value=$NOO>\n"; }else{ print "<input type=hidden name=NO value=0>\n"; } if(isset($_POST["add"])){ $count=0; for($i=0;$i<$NOO;$i++){ $count++; print "<tr><td align=right>$count</td><td ><select name=item[]>\n"; $sql = "select item_name from m_item order by item_code"; $col = pg_fetch_array($result); $col = pg_query($con, $sql); while($data = pg_fetch_array($col)){ > <OPTION VALUE="<?php $data['item_name'] ?>"> <?php echo $data['item_name'] ?> </OPTION> <?php } print "</select> </td>\n"; if(isset($kazu[$i])){ print "<td><input type=text size=10 name=kazu[] value=$kazu[$i]></td>\n"; }else{ print "<td><input type=text size=10 name=kazu[]></td>\n"; } print "<td><input type=submit name='add' value="削除" onclick =keisan()></td></tr>\n"; } }

    • 締切済み
    • PHP
  • PHPコードの読解お願いいたします

    PHP初心者です。 環境→XAMPP1.7.0でアパッチなど一括ダウンロード OSはヴィスタ 以下コード中分からない点がありますので、ご指導よろしくお願いいたします。(細かい点は省略しています) なお●の部分が分からない点です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <?php $city=array("東京""大阪""名古屋""神奈川") ?> <h2>出発地のご案内</h2> <form> <select name="city"> <?php foreach($city as $name=>$value){  ● print "<option value={$value}>{$value}</option> } ?> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・foreach内の$nameと$valueの変数はそれぞれ何を表わしているのでしょうか。 私の教科書的理解で申しますと、$nameはキー用の変数を表わし、$valueは値用の変数を表すものだと思っております。 そこから考えると、$cityに格納されている”東京"、"大阪"、"名古屋"、"神奈川”それぞれの文字列はキー用の$nameに格納される、なら残った$valueには何が入るのでしょうか。 そもそもforeach($配列名 as $キー用の変数=>$値用の変数)という記載の仕方ができるのは、事前に配列にて 例えば$配列名=array("キー0"=>値0、"キー1"=>値1・・) といった記載がされている場合に有効なのではないかと思うのですが。 繰り返しますが、おそらく$cityに格納されているそれぞれの文字列がキー変数を表わす"$name"に代入されると思うのですが、それでは値用の変数$valueにはいったい何が格納されるといういうのでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう