2016-03-15 3 views
-3

У меня есть массив как сильфон,Создание HTML-таблица с использованием PHP StdClass Object

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 таблицу вывода, используя вышеупомянутый массив,

enter image description here

Идея состоит в том, чтобы показать отработанные часы для заданной задачи за определенный недельный период (в данном случае первую неделю февраля 2016 года). Согласно вышеприведенному массиву, [часы] - это отработанные часы, а [createdon] - рабочий день.

например,

test p1 | тестовая структура | task - имеет два массива ([0] => stdClass Object и [1] => stdClass Object) в указанном выше объекте 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> 

И спасибо заранее.

+0

испытание это и дайте мне знать статус 'Еогеасп ($ обр в $ Вэл) { $ а = get_object_vars ($ Вэл); ? \t> $ v'; \t} \t?> \t \t

+0

Привет. он дает что-то вроде этого http://prnt.sc/afgfx5 и спасибо за вашу руку :)) –

+0

попробуй это, это была моя глупость 'foreach ($ arr as $ val) {$ a = get_object_vars ($ val); ?>'. $ v. ''; }?>

ответ

1

Я думаю, что вы хотите, если комбинация имени проекта, 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; 
?> 
+0

Спасибо. да это сочетание projectname, structurename и taskname также я хочу показать обработанные часы в той же строке, что и другие строки, пропуская их. –

+0

Если ypu может ссылаться на изображение, которое я прикреплл. Вы могли бы понять, что я говорю :)), и я ценю вашу руку за это –

+0

@jitendra, ваш ответ подходит только для этого, и если ему нужно изменить в будущем, это не сработает. Так что я предлагаю вам сделать это лучше, на данный момент я могу его продвинуть. –

0

Попробуйте вы получите таблицу, чем вы можете изменить его, чтобы получить результат, желание или вы можете изменить ваш заголовок таблицы.

foreach($arr as $val){ 
     $a = get_object_vars($val); 
     echo "<tr>"; 
     foreach($a as $v){ 
      echo "<td>$v</td>" } 
      echo "</tr>"; 
     } 
    } 
Смежные вопросы