customtema
@customtema
arint.ru

PHP, вложенные foreach с одним массивом, что не так?

Мне стыдно писать этот вопрос, так как много лет работаю с PHP, но эта ситуация поставила меня в тупик.

foreach ($array as $key => $value)
{
	foreach ($array as $second_key => $second_value)
	{
		if (some_compare($key, $value, $second_key, $second_value))
		{
			$array[$key] = some_processing($key, $value, $second_key, $second_value);
		}
	}
}


Проблема в том, что при нескольких прохождениях $array во внешнем цикле изменяется неправильно. Таким образом, фиксируется только последнее изменение, а все предыдущие игнорируются. Не, я понимаю, что внутри foreach работает с копиями, но изменения в оригинал все же вносятся, или я не понимаю...

Что не так? Как выполнить обработку?

UPD. Задачу решил, вынес вложенный цикл в колбек и все заработало правильно. Тем не менее - что не так с этим языком? Или что я не понимаю?
  • Вопрос задан
  • 1038 просмотров
Решения вопроса 1
VladimirAndreev
@VladimirAndreev
php web dev
&$value
&$second_value
иначе php создает в памяти ссылку $value => $array[$key], но как только $value меняется - ссылка разрушается.
передача &$value препятствует этому разрушению.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы