PHP цикл через дни месяцев и месяцев

-5

Я пытаюсь создать простой календарь и получить результат с вложенными whiles, но он, похоже, не работает, и я получаю сообщение об ошибке "Достигнутый префикс PHP". В "моей собственной логике" я не вижу, что случилось, хе-хе. Кто-нибудь может указать, где моя ошибка?

//Starting month
$mes = '2012-01-01';
//Counter months
$m = 1;
//LOOP month
while($m <= 12){
//Variables days
$data = $mes;
//Counter days
$x = 1;
//LOOP days
while($x <= 31){
echo "$data";
//adding one day
$data = strtotime("$data + 1 days");
$data = date("Y-m-d",$data);
++$x;
}
//adding one month
$mes = strtotime("$mes + 1 month");
$mes = date("Y-m-d",$mes);
++$m;
}

********* EDIT: *

Извините, ребята, код ACTUALLY работает, и вместо этого я запускаю проблему JOOMLA.

Решение для тех, кто использует Joomla и получает эту же ошибку:

    переходит в конфигурацию.php в корне вашего сайта; вставить последнюю строку (после '}') команду

ini_set ('pcre.backtrack_limit', -1);

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

спросил(а) 2021-01-19T15:35:24+03:00 6 месяцев, 1 неделя назад
1
Решение
64

Основной календарь (дневной цикл):

$start = strtotime("01/01/2010");
$i_max = (date("L",$start)?366:365)-1;

for($i = 0;$i <= $i_max;$i++)
$calendar
[strftime("%B",$loop = strtotime("+$i day",$start))]
[strftime("%V",$loop)]
[strftime("%a",$loop)] = strftime("%e",$loop);

print_r($calendar);

Продвинутый, это легко печататься и показывает количество дней в месяц:

$calendar_year = 2010;
$start = strtotime("01-01-$calendar_year");
if(strftime("%u",$start) != "1")
$start = strtotime("last Monday",$start);

$end = strtotime("31-12-$calendar_year");
if(strftime("%u",$end) != "7")
$end = strtotime("next Sunday",$end);

$loop = $start;
$d_names = $m_names= array();
while($loop<=$end)
{
$data = explode(",",strftime("%d,%u,%V,%m,%Y,%a,%B",$loop));
list($d,$d_nr,$w,$m,$y,$d_name,$m_name) = $data;
$m = (int)$m;
$w = (int)$w;
$d = (int)$d;

if(!isset($d_names[$d_nr]))$d_names[$d_nr] = $d_name;
if(!isset($m_names[$m]))$m_names[$m] = $m_name;

if($y!=$calendar_year)
$m = $m==12?0:13;

$calendar[$m][$w][$d_nr] = array($d,true);

$loop = strtotime("+1 day",$loop);
}
for($m = 1;$m<=13;$m++)
foreach($calendar[$m] as $w =>&$days)
if(count($days)<7)
{
for($i = 1; $i<=7;$i++)
if(!isset($days[$i]))
$days[$i] = isset($calendar[$m-1][$w][$i])?
array($calendar[$m-1][$w][$i][0],false):
array($calendar[$m+1][$w][$i][0],false);
ksort($days);
}
unset($calendar[0],$calendar[13]);

echo "<table>";
echo "<tr><th COLSPAN=8>$calendar_year</th></tr>";
foreach($calendar as $month => $weeks)
{
echo "<tr><th COLSPAN=8>$m_names[$month]</th></tr>";
$first_week = true;
foreach($weeks as $week => $days)
{
if($first_week)
{
echo "<tr><th></th>";
foreach($days as $day_nr => $day_data)
echo "<th>$d_names[$day_nr]</th>";
echo "</tr>";

$first_week = false;
}
echo "<tr><th>$week</th>";
foreach($days as $day_nr => $day_data)
echo "<td".($day_data[1]?"":" style='color:gray;'").">$day_data[0]</td>";
echo "</tr>";
}
}
echo "</table>";

оба они основаны на стандарте ISO8601 и поддерживают настройку langauge:

setlocale (LC_TIME, "en_EN.utf8");

ответил(а) 2021-01-19T15:35:24+03:00 6 месяцев, 1 неделя назад
45

Неверная строка: $data = $mes; вы должны поставить его перед первым циклом while.

ответил(а) 2021-01-19T15:35:24+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема