简体   繁体   中英

How do I write a PHP loop to display data from a database query in Table format?

Array Output

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
(
)

Display Months and Site

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>';

Desired Output

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

As one can see, Month Jun and Sep do not contain any data and so the array is empty while other months contains data which are printed in tabular format. The only data to be printed are Engineer Name, Site and Hours

How do I loop the array in order to achieve above output?

This is assuming you have this variable defined:

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

First, create an array of users:

<?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'];
                }
            }
        }
    }
}
?>

Second, in the table, loop through the $user_array and add n/a to those months without data.

<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>

Try to insert a breakline into this code.

$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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM