Как убрать дублирование в foreach или чем его заменить в календаре?

основа phpfaq.ru/calendar_demo.php?m=11&y=2016

...
		<table width='100%' border='0' cellspacing='1' cellpadding='4' class="news-calendar-table"> 
		 <tr class="calendar-day"><td>Пн</td><td>Вт</td><td>Ср</td><td>Чт</td><td>Пт</td><td>Сб</td><td>Вс</td><tr>
		<?	
			for($d=$start;$d<=$end;$d++) { 
				if (!($i++ % 7)) echo " <tr>\n";
				echo '  <td align="center" class="calendar-date">';
				
				if ($d < 1 OR $d > $day_count) {
					echo "&nbsp";
				} else {
					$curent="$m.$y";
					$now=sprintf("%02d",$d).".".$curent;
					foreach($arResult["ITEMS"] as $arItem){
						if ($now==$arItem['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE']) {//$arResult["ITEMS"] as $arItem
							echo '<b><a href="'.$_SERVER['PHP_SELF'].'?date='.$now.'" title='.$arItem['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE'].'>'.$d.'</a></b>'; 
						}
					}
					echo $d;
				} 
				echo "</td>\n";
				if (!($i % 7))  echo " </tr>\n";
			} 
		?>
		</table>


Самый важный кусок здесь этот
//$arItem['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE'] - проверка даты
foreach($arResult["ITEMS"] as $arItem){//может заменить его чем-то...
 if ($now==$arItem['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE']) {//$arResult["ITEMS"] as $arItem
  echo '<b><a href="'.$_SERVER['PHP_SELF'].'?date='.$now.'" title='.$arItem['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE'].'>'.$d.'</a></b>'; 
  }
}
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Вам нужно перед циклом for проиндексировать массив $arResult['ITEMS'] по дате события:
$items = [];

foreach ($arResult["ITEMS"] as $item) {
    $items[$item['DISPLAY_PROPERTIES']['DATA_SOBYTIYA']['VALUE']][] = $item;
}

Ну а дальше нужно будет просто внутри цикла проитерировать по $items[$now] и вывести всё, что там есть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы