Builder.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 海豚PHP框架 [ DolphinPHP ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2016~2019 广东卓锐软件有限公司 [ http://www.zrthink.com ]
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://dolphinphp.com
  8. // +----------------------------------------------------------------------
  9. namespace form\complexTable;
  10. /**
  11. * Class Builder
  12. * @package form\complex_table
  13. */
  14. class Builder
  15. {
  16. /**
  17. * 显示表格
  18. * @param string $name 表单项名
  19. * @param string $title 标题
  20. * @param array $data 数据
  21. * @param bool $header 是否有表头
  22. * @author 蔡伟明 <314013107@qq.com>
  23. * @return array
  24. */
  25. public function item($name = '', $title = '', $data = [], $header = false)
  26. {
  27. $head = [];
  28. $cols = 1;
  29. if (true === $header) {
  30. $header = array_shift($data);
  31. $header = $header === null ? [] : [$header];
  32. }
  33. if ($header) {
  34. foreach ($header as $row) {
  35. $cols = count($row) > $cols ? count($row) : $cols;
  36. foreach ($row as $k => $v) {
  37. $head[0][] = $this->parseCell($v);
  38. }
  39. }
  40. }
  41. if (!empty($data)) {
  42. foreach ($data as $key => $row) {
  43. foreach ($row as $k => $v) {
  44. if (is_array($v)) {
  45. // 是数组,表示表格中的表格
  46. if (is_string(end($v))) { // 数组最后一个元素是字符串,则表示合并行和合并列的参数
  47. $merge = explode(':', end($v));
  48. $colspan = $merge[0];
  49. $rowspan = isset($merge[1]) ? $merge[1] : '';
  50. array_pop($v);
  51. } else {
  52. $rowspan = '';
  53. $colspan = '';
  54. }
  55. $data[$key][$k] = [
  56. 'value' => $v,
  57. 'rowspan' => $rowspan,
  58. 'colspan' => $colspan,
  59. ];
  60. } else {
  61. $data[$key][$k] = $this->parseCell($v);
  62. }
  63. }
  64. }
  65. }
  66. return [
  67. 'name' => $name,
  68. 'title' => $title,
  69. 'data' => $data,
  70. 'head' => $head,
  71. 'cols' => $cols
  72. ];
  73. }
  74. /**
  75. * 分析单元格合并
  76. * @param $v
  77. * @return array
  78. * @author 蔡伟明 <314013107@qq.com>
  79. */
  80. private function parseCell($v)
  81. {
  82. if (preg_match('/\[(.*)\]/', $v, $matches)) {
  83. $cell = str_replace($matches[0], '', $v);
  84. $merge = explode(':', $matches[1]);
  85. $result = [
  86. 'value' => $cell,
  87. 'colspan' => $merge[0],
  88. 'rowspan' => isset($merge[1]) ? $merge[1] : '',
  89. ];
  90. } else {
  91. $result = [
  92. 'value' => $v,
  93. 'rowspan' => '',
  94. 'colspan' => '',
  95. ];
  96. }
  97. return $result;
  98. }
  99. /**
  100. * @var array 需要加载的css
  101. */
  102. public $css = [
  103. 'complextable.css'
  104. ];
  105. }