使用PHP stdClass对象创建HTML表

使用PHP stdClass对象创建HTML表,php,html,arrays,Php,Html,Arrays,我有一个像贝娄这样的阵列 Array ( [0] => stdClass Object ( [projectname] => test p1 [structurename] => test structure [taskname] => task [taskstartdate] => 2016-02-02 00:00:00 [estimatedhours] => 10.00 [hours] => 5.00 [createdon] => 2016-0

我有一个像贝娄这样的阵列

Array ( [0] => stdClass Object ( [projectname] => test p1 [structurename] => test structure [taskname] => task [taskstartdate] => 2016-02-02 00:00:00 [estimatedhours] => 10.00 [hours] => 5.00 [createdon] => 2016-02-03 07:38:08 )
        [1] => stdClass Object ( [projectname] => test p1 [structurename] => test structure [taskname] => task [taskstartdate] => 2016-02-02 00:00:00 [estimatedhours] => 10.00 [hours] => 2.00 [createdon] => 2016-02-04 14:21:34 )
        [2] => stdClass Object ( [projectname] => p2 [structurename] => struc [taskname] => p2t1 [taskstartdate] => 2016-02-03 00:00:00 [estimatedhours] => 8.00 [hours] => 2.00 [createdon] => 2016-02-04 11:05:31 )
        [3] => stdClass Object ( [projectname] => p2 [structurename] => struc [taskname] => p2t1 [taskstartdate] => 2016-02-03 00:00:00 [estimatedhours] => 8.00 [hours] => 6.00 [createdon] => 2016-02-05 08:00:22 )
        [4] => stdClass Object ( [projectname] => web dev [structurename] => dev test [taskname] => dev task [taskstartdate] => 2016-02-04 00:00:00 [estimatedhours] => 30.00 [hours] => 8.00 [createdon] => 2016-02-04 08:21:14 )) 
我希望您帮助我使用上述数组创建以下HTML表输出

其想法是显示特定周内给定任务的工作时间,本例中为2016年2月的第一周。 根据上面的数组,[hours]是工作时间,[createdon]是白天工作时间

比如,

测试p1 |测试结构|任务-在上面的stdClass对象中有两个数组[0]=>stdClass对象和[1]=>stdClass对象,因为它们代表给定项目的相同任务,所以它们应该在HTML表中的一行中

02-01 | 02-02 | 02-03 | 02-04 | 02-05是二月第一周的日期 我使用另一个数组来表示以下日期

Array ( [0] => 2016-02-01
        [1] => 2016-02-02
        [2] => 2016-02-03
        [3] => 2016-02-04
        [4] => 2016-02-05 ) 
此外,我已经尝试了它如下,但它没有给我预期的输出

<table id="filter_table4" class="mytable">
        <thead>
            <tr>
                <th>Project | Structure | <b>Task</b></th>
                <th>Start Date, Time</th>
                <th>Estimated<br />Hours</th>
                <?php
                  foreach( $dates as $date )
                  {
                    $date = DateTime::createFromFormat("Y-m-d", $date);
                    echo '<th>'. $date->format("m-d") .'</th>';
                  }
                ?>
                <th>Progress</th>
            </tr>
        </thead>
        <tbody>
            <?php
              foreach( $week_tasks as $task )
              {
                echo '<tr>
                        <td>'. $task->projectname .' | '. $task->structurename .' | <b>'. $task->taskname .'</b></td>
                        <td>'. $task->taskstartdate .'</td>
                        <td>'. $task->estimatedhours .'</td>
                        <td> '. $task->hours .' </td>
                        <td> '. $task->hours .' </td>
                        <td> '. $task->hours .' </td>
                        <td> '. $task->hours .' </td>
                        <td> '. $task->hours .' </td>
                        <td>
                            '. $progress .'
                        </td>
                    </tr>';
              }
            ?>
        </tbody>
    </table>

先谢谢你

我想如果您想再次使用projectname、structurename和taskname的组合,则应跳过该行。 试试这个代码

    <?php
$array_new  = array();
$i = 0;
  foreach( $week_tasks as $task )
  {
    $search_string = $task->projectname .' | '. $task->structurename .' | '. $task->taskname;

    $date = DateTime::createFromFormat("Y-m-d", $date);
    $md = $date->format("m-d");
    if(!isset($array_new[$search_string]))
    {
        $array_new[$search_string]['name'] = $task->projectname .' | '. $task->structurename .' | <b>'. $task->taskname .'</b>'; 
        $array_new[$search_string]['taskstartdate'] = $task->taskstartdate;
        $array_new[$search_string]['estimatedhours'] = $task->estimatedhours;
    }

    $array_new[$search_string]['hours'][$md] = $task->hours; 

  }
  $html ='';
  foreach( $array_new as $row )
  {
        $html .= '<tr>
            <td>'. $row['name'] .'</td>
            <td>'. $row['taskstartdate'] .'</td>
            <td>'. $row['estimatedhours'] .'</td>';

        foreach( $dates as $date )
        {
            $date = DateTime::createFromFormat("Y-m-d", $date);
           $md = $date->format("m-d");
           if(isset($row[$md])){
            $html.='<td> '. $row[$md] .' </td>';
           }else{
                $html.='<td> </td>';
           }
        }

       $html .='<td>
                '. $progress .'
            </td>
        </tr>';
    }
    echo $html;
?>

测试这个,让我知道foreach$arr as$val{$a=get_object_vars$val;?>的状态。它给出了类似的东西,感谢你的帮助:试试这个,这是我的愚蠢foreach$arr as$val{$a=get_object_vars$val;?>它给了我这个,它与预期的有点不同。现在这个foreach$arr as$val{$a=get_object\u vars$val;?>谢谢。是的,这结合了projectname、structurename和taskname,我还想在跳过其他行的同时显示同一行中的工作时间。如果ypu可以参考我所附的图片,你可能会理解我的意思:我感谢你的帮助this@jitendra,哟你的回答只对这一点有好处,如果他将来需要改变,这是行不通的。所以我建议你用更好的方式去做,现在,我可以投票表决。