0

必要に応じてテーブルを生成するクラスを作りたいです。私が欲しいのは、以下のようなメソッドを呼び出すことです:

$html = new HTML;
$html->createTbody(
  Array(
    'tr' => Array(
      'td' => Array(
        '1','2','3','4'
      )
    ), 
    'tr' => Array(
      'td' => Array(
        '5','6','7','8'
      )
    )
  )
);

ここでは、次の方法があります。


<?php
Class HTML{

   [..]

  public function createTbody($params = Array()){
    $output = "\n\t".'<tbody>';  
    foreach($params['tr'] AS $tr){
      $output .= '<tr>';
      foreach($params['tr']['td'] AS $td){
        $output .= "\n\t\t".'<td>'.$td.'</td>';
      }
      $output .= '</tr>';
    }
    $output .= "\n\t".'</tbody>'."\n";
    echo($output);
  }
?>

これに関する問題は、最後のtr配列のみが印刷されることです。またprint_r$params配列を表示すると、 が表示されます5, 6, 7, 8

今、私はかなり立ち往生しています。tr配列を一意にするか、メソッドを再帰的にする必要があると思いますが、どうすればよいですか?

私は次のようにメソッドを呼び出してみました:

$html->createTbody(
  Array(
    'num' => '2', 
    'tr1' => Array(
      'td' => Array(
        '1','2','3','4'
      )
    ), 
    'tr2' => Array(
      'td' => Array(
        '5','6','7','8'
      )
    )
  )
);

そして、for($i=0;$i<$params['num'];$i++)ループ内で同じメソッドを呼び出してtr and td配列を呼び出します$params['tr'.$i]['td']が、それは本来の方法で出力しませんでした。ただし、その配列を印刷すると、完全な配列が表示されました。

多分誰かが私を助けることができますか?

4

2 に答える 2

1

このようなもの

array(
    'tr' => array(
        array(1, 2, 3, 4), // first row
        array('foo', 'bar', 5, 6), //second row
        // ...
    ),
);

tdから分離する必要がある場合はth、次のようなものを使用できます。

array(
    'tr' => array(
        array('th' => array(1, 2, 3, 4), 'td' => array(5)), // first row
        array('td' => array('foo', 'bar', 5, 6, 7)), //second row
        // ...
    ),
);
于 2013-05-23T11:36:17.640 に答える
0

あなたの問題は、同じキーを何度も定義しているため、それらを上書きしていることです。キーをまったく使用しないことをお勧めします。配列の最初のレベルが常に tr であり、2 番目のレベルが常に td であることを確認してください。

また、印刷するときは、内側の foreach が間違っています。foreach tr ですべての tr/td を取得する代わりに、最初の foreach から tr 変数を使用し、その tds を取得する必要があります。

さらに、1 つのレイヤーの配列が多すぎます。TR と呼ぶものには、常に 1 つの項目しか含まれていません。

これはより適しているはずです:

$html = new HTML;
$html->createTbody(
    Array( // entire table
        Array( // tr
            '1','2','3','4' // td's
        ), 
        Array( // tr
            '5','6','7','8' // td's
        )
    )
);

そして、これはあなたの出力コードになる可能性があります:

<?php
Class HTML{

    [..]

    public function createTbody($params = Array()){
        $output = "\n\t".'<tbody>';  
        foreach($params AS $tr){
            $output .= '<tr>';
            foreach($tr AS $td){
                $output .= "\n\t\t".'<td>'.$td.'</td>';
            }
            $output .= '</tr>';
        }
        $output .= "\n\t".'</tbody>'."\n";
        echo($output);
    }
?>
于 2013-05-23T11:48:51.370 に答える