PHP сообщество

любители кода :)

Работа с ссылками или рекурсией (?)

Bloged in Без рубрики от admin Понедельник Октябрь 29, 2007 at about 9:12 дп

Вопрос, собственно, кто как реализовывает рекурсивный проход по массиву, где может быть такая засада:

$aaa = array( 1,2,3,4 );
$aaa[4] = &$aaa;

var_dump( $aaa ); // эта сволочь знает, что это *RECURSION*!

print_r0( $aaa ) // например, это аналог print_r. циклится, естественно.
{
	$r = "";
	if( is_array( $aaa ) )
		foreach( $aaa as $k => $v )
			$r .= $k . ' = ' . print_r0( $v );
	else
		$r = $aaa;

	return $r;
}

мысли пока “тупо в лоб”: завести массив ссылок, который объявить глобально в функции, заполнять в процессе прохода по элементам, и проверять, обрабатывался ли текущий элемент. (опять же, как проще?..)

Пошукал в пхп, ничего не нашукал про сравнение ссылок… И стало совсем печально ;(…

Есть ли аккуратное решение?

UPD:
Смотрю на вар_дамповский дамп и думаю…

Есть два типа данных в пхп, где может быть рекурсия.
Либо массив, либо объект.
Если массив - можно запоминать название и кол-во элементов.
Если объект - еще проще, да и реже в объектах рекурсия.
Таким образом, получаем, что с большой долей вероятности можно определить, что это цикл и не входить в перебор его(массива/объекта) элементов.
Возникает еще один не менее важный вопрос…

Как определить, что это элемент - ссылка (&)?

UPD:
Спасибо '[info]'digital_dog за подсказку.
Суть: Помечать пройденные элементы флагом посещения.

Комментариев нет

Комментариев нет.

Извините, комментирование на данный момент закрыто.