PHP Array Loop + MySQL data

Я строю систему ротации / календаря, и в определенный момент я борюсь из-за недостатка знаний о массивах PHP.

Для этой конкретной проблемы у меня есть две ячейки с датами, 17/08/2017 и 18/08/2017. В те дни 2 сотрудника сменяются, и я надеюсь, что смогу повторить эти два вопроса. инициалы и смещение значения в соответствующую ячейку.

Ниже приведен запрос, и что я сейчас делаю с

$query_show_rota='SELECT * FROM `rota` INNER JOIN users ON users.uid=rota.staffmember WHERE "'.$this->currentDate.'" >= `rotastart` AND "'.$this->currentDate.'" <= `rotaend`';
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
$result=mysqli_query($db,$query_show_rota);
if (!$result) {
printf("Error: %s\n", mysqli_error($db));
exit();
}

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$rota_initials_loop_array = array();
array_push($rota_initials_loop_array, $row['initials']);
print_r($rota_initials_loop_array);
echo $this->currentDate . " - ";
echo $row['initials'] . " ";
echo $row['shift'] . "<br />";
}

(некоторые из вышеперечисленных, например, эхо в цикле while, предназначены для тестирования)

Это приводит к следующим данным, возвращаемым из MySQL (некоторые поля удалены для удобства просмотра):

|  rid  |  staffmember  |  initials  |  rotastart  |  rotaend  |  shift  |
|   6   |       1       |     DB     |  2017-08-17 | 2017-08-18|   1430  |
|   7   |       6       |     LG     |  2017-08-17 | 2017-08-18|   0800  |

(2 дня для каждого сотрудника, где оба сотрудника находятся в смене)

В браузере за пределами ячеек календарного дня я вижу:

Array ( [0] => DB ) 2017-08-17 - DB 1430
Array ( [0] => LG ) 2017-08-17 - LG 0800
Array ( [0] => DB ) 2017-08-18 - DB 1430
Array ( [0] => LG ) 2017-08-18 - LG 0800

(результат тестирования print_r и echo в моем коде далее)

Я не буду беспокоить вас циклом и кодом генерации ячеек для каждого календарного дня, но в нем есть следующее:

<?php
foreach($rota_initials_loop_array as $initials_value):
echo $initials_value
endforeach;
}
?>

Но я не получаю абсолютно никаких данных, напечатанных в каждой ячейке дня. И я не слишком уверен, почему. Главным образом потому, что я впервые коснулся массивов в PHP. Я даже не знаю, должен ли я использовать массив для этого? Я работал без сбоев, когда возвращалась только 1 строка, это было до того, как я превратил строку $ в цикл while и т. Д.

Я открыт для предложений, как это сделать иначе? По сути, я хочу получить 2x div в каждой дневной ячейке, которые содержат входные данные и смену каждого сотрудника, поэтому «БД — 1430» в одном делении в день X и «LG — 0800» в другом div под ним в тот же день X. Затем то же самое для дня Y.

0

Решение

По сути, я хочу получить 2x div в каждой дневной ячейке, которые содержат входные данные и смену каждого сотрудника, поэтому «DB — 1430» в одном div в день X и «LG — 0800» в другом div ниже того же день X. То же самое для дня Y.

Итак, вам нужно сгенерировать ваш массив с датами в качестве ключей. Что-то похожее на это:

$data = [
'day-x' => [
['DB', '1430'],
['LG', '0800'],
],
'day-y' => [
...
]
];

Несмотря на то, что вы пытались тщательно объяснить существующий код, я не могу сказать, что могу визуализировать структуру данных, поэтому приведенный ниже цикл while должен быть адаптирован для соответствия вашим данным.

Предполагая, что вы каким-то образом получите все компоненты дерева данных (дата, начальный, сдвиг) в каждой строке, вы можете получить массив в форме, подобной той, что я дал выше, с этим:

$data = [];
while($row=mysqli_fetch_assoc($result)) {
if(!array_key_exists($row['date'], $data)) {
$data[$row['date']] = [];
}
$data[$row['date']][] = [$row['initials'], $row['shift']];
}

На этом этапе вам будет лучше, если вы json_encode и отправите данные в браузер. Это, однако, потребовало бы кардинальных изменений (использование ajax для получения календарных данных и рендеринг с использованием javascript). Если вы хотите продолжить генерировать HTML в PHP, вот как вы потребляете $data массив:

$html = '';
foreach($data as $date => $events) {
$html .= '<div class="day">
<span class="day-number">' . $date . '</span>';
foreach($events as $event) {
$html .= '<span class="event">' . $event[0] . ' - ' . $event[1] . '</span>';
}
$html .= '</div>';
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector