【问题标题】:Print PHP array into table views with foreach使用 foreach 将 PHP 数组打印到表视图中
【发布时间】:2020-07-14 03:10:15
【问题描述】:

我是开发新手,我对以下逻辑有疑问。

这是我的示例数据库。

$data = array(3) {
$x_count = 2;
[1] =>  $name = 'A';
        $y_count = 2;
        array(2) {
            [1] =>  $name = 'A.1';
                    $z_count = 2;
                    array(2) {
                        [1] =>  $name = 'A.1.a';
                                $val = 1;
                        [2] =>  $name = 'A.1.b';
                                $val = 1;
                    }
            [2] =>  $name = 'A.2';
                    $z_count = 2;
                    array(2) {
                        [1] =>  $name = 'A.2.a';
                                $val = 2;
                        [2] =>  $name = 'A.2.b';
                                $val = 2;
                    }
        }
[2] =>  $name = 'B';
        $y_count = 2;
        array(2) {
            [1] =>  $name = 'B.1';
                    $z_count = 2;
                    array(2) {
                        [1] =>  $name = 'B.1.a';
                                $val = 3;
                        [2] =>  $name = 'B.1.b';
                                $val = 3;
                    }
            [2] =>  $name = 'A.2';
                    $z_count = 2;
                    array(2) {
                        [1] =>  $name = 'B.2.a';
                                $val = 4;
                        [2] =>  $name = 'B.2.b';
                                $val = 4;
                    }
        }
}

我必须像这样打印

我不知道使用 foreach 循环将数据打印到此表中或计算每个 x、y、z 标题的“colspan”数量。

我真的希望得到一些建议。非常感谢!

编辑:x_count、y_count 和 z_count 是从 DB 获取的变量,它不仅仅是 2。 EDIT2:我的预期结果如下所示:

        <table>
        <tr>
            <th>x_name</th>
            <td colspan = "7">A</td>
            <td colspan = "7">B</td>
            <th rowspan = "3">SUM</th>
        </tr>
        <tr>
            <th>y_name</th>
            <td colspan = "3">A.1</td>
            <td colspan = "3">A.2</td>
            <td rowspan = "2">SUM</td>
            <td colspan = "3">B.1</td>
            <td colspan = "3">B.2</td>
            <td rowspan = "2">SUM</td>
        </tr>
        <tr>
            <th>z_name</th>
            <td>A.1.a</td>
            <td>A.1.b</td>
            <td>SUM</td>
            <td>A.2.a</td>
            <td>A.2.b</td>
            <td>SUM</td>
            <td>B.1.a</td>
            <td>B.1.b</td>
            <td>SUM</td>
            <td>B.2.a</td>
            <td>B.2.b</td>
            <td>SUM</td>
        </tr>
        <tr>
            <th>value</th>
            <td>1</td>
            <td>1</td>
            <td>2</td>
            <td>2</td>
            <td>2</td>
            <td>4</td>
            <td>6</td>
            <td>3</td>
            <td>3</td>
            <td>6</td>
            <td>4</td>
            <td>4</td>
            <td>8</td>
            <td>14</td>
            <td>20</td>
        </tr>
    </table>

【问题讨论】:

  • 首先我认为您应该尝试创建一个具有相同结构的html表,然后考虑稍后将PHP应用于该html
  • 你可以看看这个链接https://html.com/tables/rowspan-colspan/,了解表格中rowspan/colspan的想法
  • @ThienHuynh mình create xong html rồi nhưng nhìn vào ko biết apply PHP kiểu gì nữa hức
  • @ThienHuynh index của mỗi array nó khác nhau nên mình ko biết làm sao để làm logic tổng quát hết trơn ...
  • ông 更新代码 phía trên đi, kèm theo html vô

标签: php arrays foreach


【解决方案1】:

你不需要添加y_count,x_count,你可以在对象$data上使用count()函数来代替。

Here是我创建的HTML结构,你可以看看

为了数据更容易处理,可以考虑使用下面我的数据结构

$data = [
    [
        "name" => 'A', // x_name
        "children" => [
            [
                "name" => 'A.1', // y_name
                "children" => [
                    [
                        "name" => 'A.1.a', // z_name
                        "value" => 1
                    ],
                ]
            ]
        ]
    ],
    ...
];

注意:以下所有代码的逻辑都用于您提供的 HTML,而不是用于我的 jsFiddle 的 HTML

第一步:对数组 $data 的每个元素运行一个循环以处理 x_name 数据。将每一行的 html 分配给变量以供进一步使用

/* Init html variable for $x_name, $y_name, $z_name, $value */
$x_html = '';
$y_html = '';
$z_html = '';
$value_html = '';
foreach ($data as $x_index => $x_data) {
    $x_children = $x_data['children'];
    $x_colspan = 1; // this variable will be sum of 1 'SUM' column and each $y_colspan
    foreach ($x_children as $y_index => $y_data) {
        $y_children = $x_data['children'];
        $y_colspan = count($y_children) + 1; // all of y's children column + SUM column

        // Update x_colspan
        $x_colspan += $y_colspan;

        // process assign html to $y_html
        $y_html .= '<td colspan = "'.$y_colspan.'">'.$y_data['name'].'</td>';
        // add SUM column
        if ($y_index == count($x_children)-1) {
            $y_html .= '<td>SUM</td>';
        }

        $sum = 0;
        foreach ($y_children as $z_index => $z_data) {
            $z_value = $z_data['value'];
            $z_html .= '<td>'.$z_data['name'].'</td>';
            // add SUM column for every looped 2 $z_data column
            if ($z_index == count($y_children)-1) {
                $z_html .= '<td>SUM</td>';
            }

            $sum += $z_value; // sum all value of current y_children
            $value_html .= '<td>'.$z_data['value'].'</td>';
        }
        // After finish assign z_html, value_html, sum it all
        $value_html .= '<td>'.$sum.'</td>'
    }


    $x_html .= '<td colspan = "'.$x_colspan.'">'.$x_data['name'].'</td>';
}

最后一步:打印出所有变量 x_html、y_html、z_html、value_html。将其与实际的表格 html 合并

$table_html = '
<table>
    <tr>
        <th>x_name</th>
        '.$x_html.'
        <th rowspan = "3">SUM</th>
    </tr>
    <tr>
        <th>y_name</th>
        '.$y_html.'
    </tr>
    <tr>
        <th>z_name</th>
        '.$z_html.'
    </tr>
    <tr>
        <th>z_name</th>
        '.$value_html.'
    </tr>
</table>
';

上面的这段代码可能无法运行,这只是一个想法。希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2021-03-28
    • 2021-02-20
    • 2015-05-10
    相关资源
    最近更新 更多