Вывод расписания на РНР

184
04 июля 2019, 15:00

Есть таблица MySQL rozklad:

 id int(10) NOT NULL,
 semestr int(3) NOT NULL,
 predmet int(3) NOT NULL,
 day int(3) NOT NULL,
 para int(3) NOT NULL,
 type int(3) NOT NULL,
 group varchar(30) NOT NULL,
 repeat int(3) NOT NULL,
 variant int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Хочу вывести расписание на неделю:

<table class=table table-bordered><thead>
<tr>
<th>Пара</th>
<th>Понедельник</th>
<th>Вторник</th>
<th>Среда</th>
<th>Четверг</th>
<th>Пятница</th>
<th>Суббота</th>
<th>Воскресенье</th>
</tr>
</thead>
<tbody>....

INSERT INTO rozklad (id, semestr, predmet, day, para, type, group, repeat, variant) VALUES (1, 1, 155, 1, 4, 1, '127,128', 1, 0);

В скрипте принимаю данные с таблицы foreach ( $results['shedule'] as $shedule ) Как их правильно отобразить на странице?

Answer 1

Попробуйте решить задачу в лоб. Вы собираетесь вывести таблицу, где столбцы это дни недели, а строки, видимо, пары. Подумав, можно смекнуть, что для построения такой таблицы, вам надо обойти все пары и для каждой пары нарисовать 7 ячеек по дням недели и какие-то из них заполнить. То есть, вам надо написать два цикла:

const MAX_LESSONS = 10; // или сколько их бывает
$rowsHtml = '';
for ($lesson = 0; $lesson < MAX_LESSONS; ++$lesson) {
    $cellsHtml = '';
    for ($day = 0; $day < 7; ++$day) {
        $cellsHtml .= '<td></td>'; // todo: вывести предмет
    }
    $rowsHtml .= '<tr>' . $cellsHtml . '</tr>';
}

Чтобы вывести что-то внутри второго цикла, вам нужны данные сгруппированные по дням и парам. Не знаю, что у вас в shedule, но допустим там то, что надо. Тогда сгруппируем данные:

$schedule = [];
foreach ($results['shedule'] as $scheduleEvent) {
    $schedule[$scheduleEvent['day']][$scheduleEvent['para']][] = $scheduleEvent;
}
const MAX_LESSONS = 10; // максимальное количество пар
$rowsHtml = '';
for ($lesson = 0; $lesson < MAX_LESSONS; ++$lesson) {
    $cellsHtml = '';
    for ($day = 0; $day < 7; ++$day) {
        $event = $schedule[$day][$lesson]?? null; // ! убедитесь, что начало нумераций совпадает
        if ($event) {
            $cellsHtml .= '<td>' . htmlspecialchars($event['predmet']) . '</td>';
        } else {
            $cellsHtml .= '<td>окно</td>';
        }
    }
    $rowsHtml .= '<tr>' . $cellsHtml . '</tr>';
}

Как видите ничего сложного, если начать решать проблему с постановки задачи и двигаться к решению постепенно.

Напоследок позволю себе дать вам совет: используйте переводчик, чтобы давать имена переменным, функциям, полям в бд (rozklad -- это otstoy).

READ ALSO
Проблема преобразования Unicode Emoji

Проблема преобразования Unicode Emoji

Помогите пожалуйста! Затык со смайлами emoji

192
Как разделить строку пополам?

Как разделить строку пополам?

Добрый день, есть такой вывод строки из БД, через strlen($var), узнал что у нее 18 символов Как мне разделить данную строку, чтобы получить в одной...

184
Выбрать всех пользователей с именем

Выбрать всех пользователей с именем

Необходима помощь в правильной реализации API

181