Задать вопрос
@mix-9

Как найти место изменения данных?

Доброго времени суток. В массиве меняются данные сами по себе. Код ниже, совсем небольшой кусочек, где не происходит никакой магии, ни ссылок, ни функций. Последний элемент массива заменяется данными из другого места. До кода элемент пустой, потому что пришлось решить проблему добавлением этого пустого элемента, чтобы не затирался реальный и дальнейшего его игнорирования. Могу только предположить, что ломаются ссылки на данные, но с чем связано и как решить не представляю. В какую сторону смотреть?

Если что, в коде дни недели превращаются в конкретные даты, хотя это вряд ли важно и к проблеме не относится
print '<!-- seehere SHEDULE_DATES step 2';
print_r($arResult['PROPERTIES']['SHEDULE_BOOKING_EXCLUDE_DATE']['VALUE']);
print '-->';
if($arResult['PROPERTIES']['SHEDULE_BOOKING']['VALUE']) {
	for($i = 0; $i < 120; $i++) {
		$timestamp = $i*86400 + time();
		foreach($arResult['PROPERTIES']['SHEDULE_BOOKING']['VALUE'] as $k => $v) {
			if(date('w', $timestamp) == $v['WEEK_DAY']) {
				$arResult['SHEDULE_DATES']['VALUE'][] = date('d.m.Y', $timestamp) . ' ' . $v['TIME_FROM'];
			}
		}
	}
	unset($arResult['SHEDULE']);
}
print '<!-- seehere SHEDULE_DATES step 3';
print_r($arResult['PROPERTIES']['SHEDULE_BOOKING_EXCLUDE_DATE']['VALUE']);
print '-->';


результат вывода
<!-- seehere SHEDULE_DATES step 2Array
(
    [0] => 09.03.2024 15:00
    [1] => 16.03.2024 15:00
    [2] => 13.04.2024 15:00
    [3] => 20.04.2024 15:00
    [4] => 
)
--><!-- seehere SHEDULE_DATES step 3Array
(
    [0] => 09.03.2024 15:00
    [1] => 16.03.2024 15:00
    [2] => 13.04.2024 15:00
    [3] => 20.04.2024 15:00
    [4] => Array
        (
            [WEEK_DAY] => 6
            [TIME_FROM] => 15:00
            [QUANTITY] => до 25 человек 
        )
)
  • Вопрос задан
  • 146 просмотров
Подписаться 1 Сложный 10 комментариев
Решения вопроса 1
IvanU7n
@IvanU7n
nothing interesting here
классическое поведение при спорадическом использовании ссылок
т.к. всего кода не видно, то должно помочь unset($v) где-нибудь перед циклом foreach
а лучше это выражение использовать после предыдущего использования ссылок для всех ненужных ссылок
причина банальна:
$a = 1;
$v = &$a;
foreach ([ 0, 1, 2, ] as $v);
echo $a;

выведет 2, а присвоение в 3-й строке может быть каким угодно
поэтому желательно всегда делать unset ссылкам после их использования, чтобы не получить такое поведение
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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