не может совпадать с датой на основе данных массива в базе данных на php - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть данные о дате отпуска за один месяц с различными типами дат, которые я пытаюсь сопоставить с данными по дате в этом месяце. когда я делаю это на основе данных строки, появляется только одна дата. Я немного менее осведомлен о логике, если это массив.

Мой стол

   | ID  |   id   |  start_date  |   end_date   | 
   | ____|________|______________|______________|
   |  1  |   x1   |  2018-11-05  |  2018-11-05  |
   |  1  |   x1   |  2018-11-12  |  2018-11-15  |
   |  3  |   x1   |  2018-11-19  |  2018-11-21  |

Мой сценарий

    $timesheet = $this->db->select('*')
                      ->where('MONTH(start_date)', 11)
                      ->where('YEAR(start_date)', 2018)
                      ->where('id', 'x1')
                      ->get();
    $result = $timesheet->row_array();                    
    $day_start=date_create($result['start_date']);
    $day_end=date_create($result['end_date']);      

    for ($x = 1; $x <= 30; $x++) {
        if($x >=$day_start->format('d') and $x <= $day_end->format('d')){
           echo "<td class='bg-warning'>Y</td>";
        }else{
            echo "<td>N</td>";
        }
    }   

    /** MY result data **/

    | Date  | ... | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ... | 
    ----------------------------------------------------------------
    | Result| ... | N |  N |  N |  Y | Y  | N  | N  |  N |  N | ... |


    /** the results I expected **/
    | Date  | ... | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ... | 
    ----------------------------------------------------------------
    | Result| ... | N |  Y |  N |  Y | Y  | N  | Y  |  Y |  Y | ... |

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы хотите объединить все записи вместе, вам нужно будет создать массив дней (я создаю его с помощью array_fill() и задаю для каждого "N", чтобы начать).

Затем вы перебираете каждую строку результатов и добавляете Y к соответствующим элементам.Затем вы переходите от начала к концу дня, используя цикл for(), чтобы заполнить дни символом Y.

Наконец, вы можете вывести массив $dates, в который добавлены все различные строки.в него.

$dates = array_fill(1, 30, "N");
foreach ($timesheet->result_array() as $result) {
    $start = (int)$result['start_date']->format('d');
    $end = (int)$result['end_date']->format('d');
    for ( $i = $start; $i <= $end; $i++ )   {
        $dates[$i] = "Y";
    }
}

foreach ( $dates as $day )  {
    if($day == "Y") {
        echo "<td class='bg-warning'>Y</td>";
    }else{
        echo "<td>N</td>";
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...