Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - как отменить ссылку? / 3 сообщений из 3, страница 1 из 1
29.12.2018, 00:52
    #39754764
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP - как отменить ссылку?
У меня есть два набора данных ($list и $data) и мне нужно их однонаправленно синхронизировать между собой.
Для этого я построчно обрабатываю второй набор $data, сопоставляя его с первым, а затем дополнительно обрабатываю пропущенные данные из первого набора $list.
Первичная обработка выглядит примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
foreach ($data as &$row)
{
	if (!array_key_exists($row['login'], $list))
	{
		$row['_status'] = 'delete';
		continue;
	}
	$rs = &$list[$row['login']];
	$rs['_status'] = 'linked';
}
foreach ($list as &$rs)
{
	if (array_key_exists('_status', $rs)) continue;
	$row = ['_status'=>'insert', ...];
	$data[] = $row;
}


Но по окончанию первого цикла в $row содержится ссылка на элемент в $data.
И когда я делаю $row=[], то я при этом также изменяю этот элемент в $data.
Если во втором цикле вместо $row использовать новую переменную (например $new), то тогда все работает нормально.
Ну либо можно просто после первого цикла выполнить unset($row), это тоже освободит ссылку.
А можно ли заставить PHP освобождать подобные ссылки автоматически, по завершению цикла?
...
Рейтинг: 0 / 0
29.12.2018, 01:38
    #39754769
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP - как отменить ссылку?
Автоматически - вряд ли. По крайней мере, в мануале явно говорится об использовании unset()
http://php.net/manual/ru/control-structures.foreach.php Внимание Ссылка $value на последний элемент массива останется после окончания цикла foreach. Рекомендуется уничтожать ее с помощью unset().
...
Рейтинг: 0 / 0
29.12.2018, 11:33
    #39754846
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP - как отменить ссылку?
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - как отменить ссылку? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]