【问题标题】:How do I write a PHP loop to display data from a database query in Table format?如何编写 PHP 循环以表格格式显示来自数据库查询的数据?
【发布时间】:2015-12-03 16:12:23
【问题描述】:

数组输出

print_r($hours_effort_result); //prints below output

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => Array
            (
                [RESOURCE_ID] => 1
                [EMPLOYEE_NAME] => User 1
                [SITE_STATUS] => Onsite
                [ACTUAL_HOURS] => 120
                [MONTH_YEAR] => JUL-2015
            )

            [1] => Array
            (
                [RESOURCE_ID] => 2
                [EMPLOYEE_NAME] => User 2
                [SITE_STATUS] => Onsite
                [ACTUAL_HOURS] => 140
                [MONTH_YEAR] => JUL-2015
            )

        )

    [2] => Array
        (
            [0] => Array
            (
            [RESOURCE_ID] => 3
            [EMPLOYEE_NAME] => User 1
            [SITE_STATUS] => Offshore
            [ACTUAL_HOURS] => 170
            [MONTH_YEAR] => AUG-2015
            )   

            [1] => Array
                (
                    [RESOURCE_ID] => 4
                    [EMPLOYEE_NAME] => User 2
                    [SITE_STATUS] => Offshore
                    [ACTUAL_HOURS] => 180
                    [MONTH_YEAR] => AUG-2015
                )

        )

    [3] => Array
        (
        )

)

foreach ($hours_effort_result as $hours_effort_data){

        echo '<pre>';print_r($hours_effort_data);//below output
}

Array
(
)

Array
(
    [0] => Array
        (
            [RESOURCE_ID] => 1
            [EMPLOYEE_NAME] => User 1
            [SITE_STATUS] => Onsite
            [ACTUAL_HOURS] => 120
            [MONTH_YEAR] => JUL-2015
        )

    [1] => Array
        (
            [RESOURCE_ID] => 2
            [EMPLOYEE_NAME] => User 2
            [SITE_STATUS] => Onsite
            [ACTUAL_HOURS] => 140
            [MONTH_YEAR] => JUL-2015
        )

)

Array
(
    [0] => Array
        (
            [RESOURCE_ID] => 3
            [EMPLOYEE_NAME] => User 1
            [SITE_STATUS] => Offshore
            [ACTUAL_HOURS] => 170
            [MONTH_YEAR] => AUG-2015
        )

    [1] => Array
        (
            [RESOURCE_ID] => 4
            [EMPLOYEE_NAME] => User 2
            [SITE_STATUS] => Offshore
            [ACTUAL_HOURS] => 180
            [MONTH_YEAR] => AUG-2015
        )
)

Array
(
)

显示月份和网站

print_R($project_months); //outputs below data

Array
(
    [0] => JUN-2015
    [1] => JUL-2015
    [2] => AUG-2015
    [3] => SEP-2015
)


echo '<tr>';

        foreach($project_months as $month_year){

            echo '<td>Site</strong></td>';
            echo '<td>'.$month_year.'</td>';
        }
echo '</tr>';

期望的输出

Name of Engineer    Site  Jun-15  Site   Jul-15  Site     Aug-15  Site  Sep-15  
User 1                            Onsite  120    Offshore  170              
User 2                            Onsite  140    Offshore  180

可以看到,月份JunSep 不包含任何数据,因此数组为空,而其他月份包含以表格格式打印的数据。唯一要打印的数据是Engineer Name, Site and Hours

如何循环数组以实现上述输出?

【问题讨论】:

  • 你能print_r($hours_effort_result);吗?
  • @Slimshadddyyy 将您设置 $hours_effort_result 的方式放入 while 循环中,然后在其中进行数据显示。如果您包括如何将数组设置为相等,我会写一个示例。
  • 为什么是反对票?
  • @Slimshadddyyy 我怀疑没有足够的信息,或者已经在这个网站上询问过。
  • 您希望您的广告动态添加数据?

标签: php arrays html-table


【解决方案1】:

这是假设你定义了这个变量:

$project_months = Array('JUN-2015', 'JUL-2015', 'AUG-2015', 'SEP-2015' );

首先,创建一个用户数组:

<?php 

$user_array = Array();

foreach ( $project_months as $month ) 
{
    foreach ($hours_effort_result as $key => $data)
    {
        if ( ! empty ($data) )
        {
            foreach ($data as $key => $val )
            {
                if ( $val['MONTH_YEAR'] == $month ) 
                {
                  $user_array[$val['EMPLOYEE_NAME']][$month]['SITE_STATUS'] = $val['SITE_STATUS'];
                  $user_array[$val['EMPLOYEE_NAME']][$month]['ACTUAL_HOURS'] = $val['ACTUAL_HOURS'];
                }
            }
        }
    }
}
?>

其次,在表格中循环遍历$user_array 并将n/a 添加到那些没有数据的月份。

<table>
<tr>
    <th>Name</th>
    <th>Site</th>
    <th>Jun-15</th>
    <th>Site</th>
    <th>Jul-15</th>
    <th>Site</th>
    <th>Aug-15</th>
    <th>Site</th>
    <th>Sep-15</th>
</tr>
<?php foreach ($user_array as $user_name => $user_data): ?>
    <tr>
        <td><?php print ($user_name); ?></td>
        <?php foreach ($project_months as $month): ?>
            <?php if ( array_key_exists( $month, $user_data ) ): ?>
                <td><?php print ($user_data[$month]['SITE_STATUS']); ?></td>
                <td><?php print ($user_data[$month]['ACTUAL_HOURS']); ?></td>
            <?php else: ?>
                <td>n/a</td>
                <td>n/a</td>
            <?php endif; ?>
        <?php endforeach; ?>
    </tr>
<?php endforeach; ?>
</table>

【讨论】:

  • 你需要再次foreach $data,因为它是嵌套数组。
  • @aldrin27,即将发布相同的内容。无法直接访问$data
  • 类似foreach ($hours_effort_result as $key =&gt; $data) { foreach ($data as $index =&gt; $val) { $project_months[$index][$key] = $val; } }
  • 对,错过了。实际上,如果您的表行是按用户名分组的,最好只重新创建一个包含每个用户数据的数组。
  • 能否请您发布一个相同的sn-p
【解决方案2】:

尝试在此代码中插入断线

$table = '';
    $table .= '<table>';
    $table .= '<thead>';
    $table .= '<th>Name of Engineer</th>';
    $table .= '<th>Site</th>';

    foreach ($arr as $key => $data)
    {
        foreach($data as $key2 => $val)
        {
            if ( ! empty($val) )
            {

                $table .= '<th>' . $val['MONTH_YEAR'] . '</th>';
            }
            else
            {
                $table .= '</th>';

            }
        }

    }
    $table .= '<br>';
    $table .= '</thead>';
    $table .= '<tbody>';

    foreach ($arr as $key => $data)
    {
        foreach($data as $key2 => $val)
        {
            if ( ! empty($val) )
            {
                $table .= '<td>'.$val['EMPLOYEE_NAME'].'</td>';
                $table .= '<td>'. $val['SITE_STATUS'] . '</td>';
                $table .= '<td>'. $val['ACTUAL_HOURS'] .'</td>';


            }
            else
            {
                $table .= '<td></td>';
                $table .= '<td></td>';

            }

        }


    }


    $table .= '</tbody>';
    $table .= '</table>';
    echo $table;

【讨论】:

  • 输出在&lt;th&gt; 中多次打印相同的月份。我需要更改格式吗?
  • 我可以看到输出吗?
  • 示例输出Name of Engineer Site JUL-2015 JUL-2015 JUL-2015 JUL-2015 User 1 Onsite 40 User 2 Onsite 140
  • 我的输出是Name of Engineer Site JUL-2015 JUL-2015 AUG-2015 AUG-2015 User 1 Onsite 120 User 2 Onsite 140 User 1 Offshore 170 User 2 Offshore 180
  • 是的,但是您会看到月份名称重复并且工程师名称显示在一行中
猜你喜欢
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2019-04-14
  • 2023-03-13
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多