複雑なHTMLテーブル用のシンプルなPHPジェネレーター

みなさんこんにちは。 新しく書かれたHTMLテーブルジェネレーターを共有したいです。

さまざまな統計情報を収集し、それをさまざまなグループ化で複雑なテーブルにコンパイルするケースがより頻繁になりました。

画像

このような傾向に気づいたので、テーブルの描画を自動化することにしました。

その結果:


画像

シンプルな構造


実際には、クラス自体は静的であり、1つのパブリックメソッドがあり、2つのパラメーターを取り、テーブルのHTMLコードを返します。

Table::html($data, $tableInfo = false); 


$data配列の構造は次のとおりです。



 Array ( [0] => Array // 1  ( [0] => Cell_00 // 1  1  [1] => Cell_01 // 2  1  [2] => Cell_02 // 3  1  ) [1] => Array // 2  ( [0] => Cell_10 // 1  [1] => Cell_11 // 2  [2] => Cell_12 // 3  ) ); 



 for($i=0;$i<5;$i++) for($j=0;$j<5;$j++) $matrix[$i][$j] = $i.$j; 


入れ子配列


しかし、これらは単純な行列の例です。 このクラスの主な機能は、自動rowspanカウントおよびデータグループ化です。

データ行(セル)の代わりに同様の配列を挿入すると、このサブ配列のすべてのデータが親行に配置されます。

画像
コード
 Array ( [0] => Array ( [0] => Cell_00 [1] => Cell_01 [2] => Cell_02 ) [1] => Array ( [0] => Cell_10 [1] => Cell_11 [2] => Array ( [0] => Array ( [0] => Cell_120 ) [1] => Array ( [0] => Cell_121 ) ) ) ) 

もう少し深く:
画像
コード
 Array ( [0] => Array ( [0] => Cell_00 [1] => Cell_01 [2] => Cell_02 ) [1] => Array ( [0] => Cell_10 [1] => Array ( [0] => Array ( [0] => Cell_110 [1] => Array ( [0] => Array ( [0] => Cell_1100 ) [1] => Array ( [0] => Cell_1101 ) ) ) [1] => Array ( [0] => Cell_111 [1] => Cell_112 ) ) ) ) 


カスタマイズ


そのため、クラスは自動的に複雑なテーブルを描画し、 rowspan'をカウントrowspan'ます。 次に、手動でテーブルを設定することに移りましょう。
$data配列には['tableInfo']配列['tableInfo']が含まれる場合があります-その'tableInfo''tableInfo' )に応じて、さまざまな設定を指定できます。
可能性があります:
  1. 配列のルートで、文字列をリストするとき

     Array ( [0] => Array(...) [1] => Array(...) ... [n] => Array(...) [tableInfo] => Array (...) ) 

    配列のルートにある'tableInfo'すると、テーブル全体の一般的な設定とパラメーターを設定できます。

     Array ( [rowspan] => false //  .     . [cols] => Array //  ( [0] => Array ( [title] =>  //title   (  th). [key] => name //key        . ) [1] => Array //title  key     ( //  cols    title,   key [title] =>  //     ,       , [key] => tel //    ) ) // HTML   : [id] => tableId [class] => tableClass [style] => color:#000; [args] => align=left width=80% // args    ,    . ) 

    同じ配列をメソッドの2番目のパラメーターとして渡すことができます。

     Table::html($data, $tableInfo = false); 

    両方のメソッドが同時に使用される場合( isset($data['tableInfo'] && isset($tableInfo) )、物議を醸す場合、2番目の$tableInfoからのルールに優先順位が与えられます。

     array_replace_recursive($data['tableInfo'], $tableInfo); 

    title
    画像
    コード
     Array ( [0] => Array ( [0] => Cell_00 [1] => Cell_01 [2] => Cell_02 ) [1] => Array ( [0] => Cell_10 [1] => Cell_11 [2] => Cell_12 ) [tableInfo] => Array ( [cols] => Array ( [0] => Array ( [title] => Title 1 ) [1] => Array ( [title] => Title 2 ) [2] => Array ( [title] => Title 3 ) ) ) ) 

    key使用例
    画像
    コード
     Array ( [0] => Array ( [0] => Cell_00 [1] => Cell_01 [2] => Cell_02 ) [1] => Array ( [0] => Cell_10 [1] => Cell_11 [2] => Cell_12 [3] => Cell_13 // , ..    key ) [tableInfo] => Array ( [cols] => Array ( [0] => Array ( [key] => 2 ) [1] => Array ( [key] => 0 ) [2] => Array ( [key] => 1 ) ) ) ) 

    画像
    コード
     $exmpl3 = array( 'tableInfo' => array( 'cols' => array( 0 => array('key' => 'cell0'), 1 => array('key' => 'cell1'), 2 => array('key' => 'cell2'), ) ), 0 => array( 'cell0' => 'Cell_00', 'cell2' => 'Cell_02', 'cell1' => 'Cell_01', ), 1 => array( 'cell0' => 'Cell_10', 'sub' => array( 0 => array( 'cell1' => 'Cell_110', 'sub' => array( 0 => array( 'cell2' => 'Cell_1100', ), 1 => array( 'cell0' => 'asdasd_10', //  , ..    'cell1' => 'asdasd_110',//    'cell2' => 'Cell_1101' ) ) ), 'sub' => array('cell1' => 'Cell_111', 'cell2' => 'Cell_112'), ) ) ); 

    ここで、 keyがまったく使用されない場合、表示されたキーの配列には、この行にあるセルのすべてのキー(サブ配列ではない)が入力されることに注意してください。 たとえば、この場合:

    コード
     $exmpl = array( 0 => array( 0 => 'Cell_00', 1 => 'Cell_01', 2 => 'Cell_02', ), 1 => array( 0 => 'Cell_10', 1 => 'Cell_11', 2 => 'Cell_12', ), ); 

    両方の行について、 $colKeys ( )は次のようになります。

     $colKeys = array(0, 1, 2); 

  2. 任意のセル配列(任意のレベル)

     Array ( [0] => Array( [qwe] =>  [asd] =>  [tableInfo] => Array (...) ) [1] => Array(...) ... ) 

     Array ( [0] => Array( [qwe] =>  [asd] =>  [zxc] => Array( [0] => Array( [jkl] =>  [tableInfo] => Array (...) ) [1] => Array() ) ) [1] => Array(...) ... ) 

    セルの配列にある'tableInfo'には、それが配置されている行の設定や各セルの設定が含まれる場合があります。

     'tableInfo' => array( 'rowspan' => false, //  rowspan    'rowspan' => true, //  rowspan    'rowspan' => 5, //   rowspan    'keys' => array( //      'delete' => 'all', //     'delete' => array('cell2'), //  ( 'cell2') 'add' => array('cell3'), //    ( 'cell3') 'forwarding' => array( //    .     0 => array( 'src' => 'cell1', //     cell1 'dst' => 'cell2' //   cell2 ), ), //  ,           ), //..            'cells' => array( //   'cell2' => array( //    'cell2' 'rowspan' => false, // 'rowspan' => true, // 'rowspan' => 5, //   'colspan' => 6, //    // HTML   : 'id' => 'cellId', 'class' => 'cellClass', 'style' => 'color:#000;', 'args' => 'align=left width=80%' ) ), // HTML   : 'id' => 'rowId', 'class' => 'rowClass', 'style' => 'color:#000;', 'args' => 'align=left width=80%' ); 


行スパンの優先順位

  1. セルのルール(最も重要なルール)。
  2. 文字列のルール。
  3. テーブルのルール。
  4. デフォルトでは、サブアレイが存在する場合、rowspanは常に考慮されます。


まあ、それだけです。 いくつかの点を詳細に検討しないことにしました。質問がある場合は、署名します。
テーブルクラスをダウンロードする

Source: https://habr.com/ru/post/J253207/


All Articles