Member 14852988 Ответов: 1

Заполнение/создание массива в PHP


Привет,

У меня есть вопрос, как решить проблему в PHP.

Цель состоит в том, чтобы создать массив, который включает в себя все данные за все будние дни, разделенные 30 минутами.

Некоторые данные извлекаются из базы данных SQL в массив, который выглядит так.
Array
(
    [0] => Array
        (
            [timekey] => 2020-08-06 01:00:00
            [0] => 2020-08-06 01:00:00
            [count] => 1
            [1] => 1
	    [day] => Monday
	    [2] => Monday
        )
    [1] => Array
        (
            [timekey] => 2020-08-06 01:30:00
            [0] => 2020-08-06 01:30:00
            [count] => 1
            [1] => 1
	    [day] => Monday
	    [2] => Monday
        )
.
.
.

Поэтому мне нужно добавить недостающие значения для временных меток, которые не являются частью результата SQL

В этом примере
Array
(
    [0] => Array
        (
            [timekey] => 2020-08-06 00:00:00
            [0] => 2020-08-06 00:00:00
            [count] => 0
            [1] => 0
	    [day] => Monday
	    [2] => Monday
        )
    [1] => Array
        (
            [timekey] => 2020-08-06 00:30:00
            [0] => 2020-08-06 00:30:00
            [count] => 0
            [1] => 0
	    [day] => Monday
	    [2] => Monday
        )
.
.
.

В конце дня у меня должен быть массив для понедельника по воскресенье, разделенный всеми временами в 30-минутной последовательности.

Я надеюсь, что это было ясно.
Есть ли у кого-нибудь подсказка, как я могу решить эту проблему?

Большое спасибо

Тоби

Что я уже пробовал:

Попробуйте создать полный массив для всех будних дней и временных меток с count = 0 и doe aaray поиск значений из базы данных

Richard MacCutchan

Эти значения времени не выглядят допустимыми для PHP. Как вы их создали?

Member 14852988

Значения времени приводятся результаты извлечения в SQL.

1 Ответов

Рейтинг:
4

W∴ Balboos, GHB

Вам нужна стратегия - например, если вам нужен массив со всеми временными метками на расстоянии 30 минут друг от друга, то создайте его с записями по умолчанию (какими бы они ни были в вашем сценарии).

Затем, когда вы извлекаете свои данные из SQL, вы можете просто заменить данные массива по умолчанию реальными данными.

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



Member 14852988

Это моя проблема.
Как мне их заменить?

Значения по умолчанию будут созданы таким образом (я знаю, что есть место для улучшений)
$current_date используется = '2020-08-11 00:00:00';
$array2d[0]['date'] = $current_date;
$array2d[0]['count'] = '0';
$array2d[0]['day'] = 'Montag';

$i = 1;

while ($i <= 336) {

$newTime = дата("Y-m-d H:i:s",strtotime("+30 минут", strtotime($current_date)));
$current_date = $newTime;
$array2d[$i]['date'] = $current_date;
$array2d[$i]['count'] = '0';
$array2d[$i]['day'] = 'Monday';
если ($i >= 48) {
$array2d[$i]['day'] = 'Tuesday';
}
if ($i >= 96) {
$array2d[$i]['day'] = 'Wednesday';
}
если ($i >= 144) {
$array2d[$i]['day'] = 'четверг';
}
if ($i >= 192) {
$array2d[$i]['day'] = 'Friday';
}
если ($i >= 240) {
$array2d[$i]['day'] = 'Saturday';
}
if ($i >= 288) {
$array2d[$i]['day'] = 'Sunday';
}

$я++;
}

Теперь значение по умолчанию для примера подсчета полей "2020-08-11 17:30:00" для "пятницы" должно быть заменено на значение, найденное в инструкции SQL для данного времени и дня.

W∴ Balboos, GHB

Хорошо - тогда сделайте именно это: замените фиктивную запись массива, когда у вас есть реальная.

Одна вещь, которую вы, возможно, захотите сделать, - это не иметь одного большого гигантского массива в течение всей недели. Почему бы не использовать один и тот же массив для каждого дневного массива и не иметь каждый день в члене массива дня недели?

Но вам нужно узнать больше об обработке массивов в php - это действительно легко, но вы абсолютно должны научиться этому!

Начните здесь: https://www.w3schools.com/php/php_arrays.asp и не пропустите ссылку на различные функции массива (PHP Array Referenc), которые вы можете использовать вместе с просто прямым доступом к членам. https://www.w3schools.com/php/php_ref_array.asp

Мой стиль ответа заключается в том, чтобы не "выдавать ответ", а направлять пользователя в то, чтобы получить ответ - наклониться, чтобы он мог сделать это сам навсегда,

Member 14852988

Привет,

спасибо за подсказку.
Я не ожидаю, что это будет прогулка или полный код. Часто подсказка, что искать или что читать, гораздо более полезна, чем копирование кода.
Я посмотрю на это и попытаюсь найти способ решить эту проблему.

Большое спасибо

W∴ Balboos, GHB

Долгосрочная подсказка: если вы хорошенько подумаете, вы можете настроить индексы числовых массивов так, чтобы они действительно идентифицировали данные. Это особенно легко сделать в php, так как вы можете объявить элемент массива без необходимости создавать промежуточные элементы. Примером может служить использование года в качестве индексного измерения, а затем на следующем уровне-месяца (и т. д.). Таким образом, если бы у вас было что-то, что вам нужно было поместить в январь 1984 года, вы могли бы иметь элемент массива: stuff[1984][1]

Поскольку это php, вам не нужно иметь пустые бесполезные файлы, такие как stuff[1492], но вы можете создать его в любое время, если вам это нужно.

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

Не забывайте: если мое или какое-то другое решение решает вашу проблему, отметьте ответ на вопрос.

Member 14852988

Привет,

спасибо за ваш ответ. Это хорошая идея, и я попробовал.
Это гораздо проще.
Я сделал цикл trhough записей, которые я нашел с помощью SQL.
При этом я сравнивал время и день с записями в моем массиве по умолчанию. Если он подходит, я устанавливаю значения массива по умолчанию на значения результата SQL.
Теперь это работает.
Спасибо за все ваши намеки.

BR

Тоби