У меня есть таблицы MySQL с суффиксом «mmdd». Мне нужно перебрать и сохранить это значение ‘mmdd’ в массиве, когда я получаю удар по таблице. Проблема в том, что вычитание даты за 1 день работает только на 1-й итерации. Я пробовал это многими способами — как функция в моем классе и т.д .; но это только вычитает день 1 раз. Должен быть лучше.
$i = 1;
$newday = array();
if ($current === 'Y') {
$newday[0] = $datesplit[1];
do {
$sqlstmt = "select * from dbname.mytable_".$newday[$i-1];
$resultchk = $db->query($sqlstmt);
$dtset = date($newday[$i-1]);
$newday[$i] = date('md', strtotime($dtset.' -1 day'));
$i++;
} while(mysqli_num_rows($resultchk) > 0);
Как правило, гораздо лучше использовать DateTime класс в PHP, если вы хотите манипулировать датами.
При условии, что $datesplit[1]
содержит что-то вроде '0806'
(на 6 августа) я бы изменил ваш код на что-то вроде этого:
$i = 0;
$newday = array();
$dtset = DateTime::createFromFormat('md', $datesplit[1]);
if ($current === 'Y') {
do {
$newday[$i] = $dtset->format('md');
$sqlstmt = "select * from dbname.mytable_".$newday[$i];
$resultchk = $db->query($sqlstmt);
$dtset->sub(new DateInterval('P1D'));
$i++;
} while(mysqli_num_rows($resultchk) > 0);
}
Других решений пока нет …