2015-02-25 4 views
1

У меня есть два массива, один для создания первого столбца (службы) в таблице, такой как структура, и второй для каждого другого столбца (день) после этого.Как исправить мои массивы для создания желаемого результата таблицы?

Мой второй массив для других столбцов имеет структуру:

Array 
(
    [0] => Array 
     (
      [Monday] => Array 
       (
        [0] => Array 
         (
          [date] => 42016 
          [message] => 07:00 START 
          [service] => DPW 

         ) 

        [1] => Array 
         (
          [date] => 42016 
          [message] => 16:30 START 
          [service] => PNS 
         ) 

        [2] => Array 
         (
          [date] => 42016 
          [message] => 
          [service] => WS1 
         ) 

    // etc ... 


    [3] => Array 
     (
      [Thursday] => Array 
       (
        [0] => Array 
         (
          [date] => 42017 
          [message] => 
          [service] => DPW 
         ) 

        [1] => Array 
         (
          [date] => 42017 
          [message] => 16:00 CUT OFF 
          [service] => DPW 
         ) 

        [2] => Array 
         (
          [date] => 42017 
          [message] => 
          [service] => PNS 
         ) 
       ) 
     ) 
) 

Так в основном каждый день является следующей колонке. Моя проблема в том, что изначально я думал, что ключ службы во втором массиве всегда был в одном порядке для каждого дня, но его нет. Вы можете видеть с четверга, что DPW два раза подряд, а в понедельник нет. Я могу изменить формат этих массивов, поэтому здесь лежат мои вопросы.

View desired output

Мои мысли для начала день должен содержать такое же количество ключей в виде массива услуг, поэтому я должен добавить пустое значение, чтобы компенсировать такое же количество ключей? Для того, чтобы удовлетворить ту же услугу в ряду следует добавить еще один уровень, чтобы удовлетворить несколько значений выглядеть так:

Array 
(

    // etc ... 


    [3] => Array 
     (
      [Thursday] => Array 
       (
        [0] => Array 
         (
          [0] => Array 
           (
            [date] => 42017 
            [message] => 
            [service] => DPW 
           ) 

          [1] => Array 
           (
            [date] => 42017 
            [message] => 
            [service] => DPW 
           ) 
         ) 

        [2] => Array 
         (
          [0] => Array 
           (
            [date] => 42017 
            [message] => 
            [service] => PNS 
           ) 
         ) 

        [3] => Array 
         (

         ) 

        [4] => Array 
         (

         ) 
       ) 
     ) 
) 

Я также добавил в пустые значения. Наконец, как бы я напечатал эти значения в том же порядке, что и первый (сервисный) массив, чтобы они не находились под неправильной услугой?

Если это сложно объяснить, и я мог бы пойти по этому пути неправильно, но именно поэтому я задаю вопросы.



EDIT:

Почти там с этим, моей единственной проблемой сейчас мне нужно, чтобы показать Пуск и обрывается дата как тот же элемент распространяться через несколько дней. Например массив может иметь эти значения в какой-то момент:

[1] => Array 
    (
     [date] => 42016 
     [message] => 16:30 START 
     [service] => DPM 
    ) 

// etc... 

[3] => Array 
    (
     [date] => 42021 
     [message] => 16:30 CUT OFF 
     [service] => DPM 
    ) 

Так что я нужен способ, чтобы они на отдельной строке с цветом фона или что-то, чтобы показать, что они являются один элемент, как на рисунке выше. Не уверен, что это возможно?

Thanks Robert!

+4

* «Как создать» * - продолжайте ... (не так много внимания). –

+0

Интересный вопрос. – Rossco

+0

@Fred -ii- Ясно ошибка в названии названия. – Robert

ответ

1

Я не уверен, что это именно то, что вы хотите, но это может помочь:

$services = array('DPW', 'PNS', 'WS1', 'WS2'); 
$days = array(
    array(
     'Monday' => array(
        array(
          'date' => 42016, 
          'message' => '07:00 START', 
          'service' => 'DPW' 

         ), 
        array(
          'date' => 42016, 
          'message' => '16:30 START', 
          'service' => 'PNS' 
         ), 
        array(
          'date' => 42016, 
          'message' => '', 
          'service' => 'WS1' 
         ), 
       ), 
    ), 

    array(
      'Thursday' => array(
        array(
          'date' => 42017, 
          'message' => '', 
          'service' => 'DPW' 
         ), 
        array(
          'date' => 42017, 
          'message' => '16:00 CUT OFF', 
          'service' => 'DPW' 
         ), 
        array(
          'date' => 42017, 
          'message' => '', 
          'service' => 'PNS' 
         ) 
       ) 
     ) 
    ); 

А вот HTML таблица:

<?php $service_days = []; ?> 
<table cellpadding="10" width="100%" align="left"> 
    <thead> 
     <td style="background:#333;color:#FFF">Service</td> 
     <?php foreach($days as $day): ?> 
      <td style="background:#666;color:#FFF"><?php echo array_keys($day)[0]; ?></td> 
      <?php 
       foreach(array_values($day)[0] as $d) 
        $service_days[array_keys($day)[0]][$d['service']][] = $d; 
      ?> 
     <?php endforeach; ?> 
    </thead> 

    <?php foreach($services as $service): ?> 
     <tr> 
      <td><?php echo $service ?></td>  

      <?php foreach($service_days as $day => $srv): ?> 
       <td>  
       <?php foreach($srv as $_service => $periode): ?> 

        <?php if($_service == $service): ?> 

          <?php foreach($periode as $p): ?> 
           <p style="background:#DDD"><?php echo $p['date'], '<br>', $p['message']; ?></p> 
          <?php endforeach; ?> 

        <?php endif; ?> 

       <?php endforeach; ?> 
       &nbsp;</td> 
      <?php endforeach; ?> 

     </tr> 
    <?php endforeach; ?>  
</table> 
+0

Спасибо, что ваш пример был большой помощью, гораздо более простым способом отображения таблицы, чем я пытался. Моя единственная проблема в том, как показать начало и конец, я редактировал свой исходный вопрос, чтобы вы могли видеть мою проблему. – Robert

+1

У меня может быть «CUT OFF» в другой день, а не в тот же день с другой датой –

+0

Да, это будет сложно. Необходимо как-то связать каждый предмет. – Robert

Смежные вопросы