Рекукрсивный массив

drwhite

Новичок
Рекукрсивный массив

Как выявить рекурсию в массиве, чтобы не писать в рекурсивных функциях счетчик вложенности уровня?
PHP:
 function processStringRecursive($data = '') 
 { 
   if(is_array($data)) 
   { 
     foreach($data as $k => $v) 
     { 
       if ($v ссылается или содержит $data) 
       { 
         continue; 
       };// 
             
       $res_data[$k] = processStringRecursive($data[$k]); 
     };//foreach 
   } 
   else if(is_scalar($data)) 
   { 
     $res_data = htmlspecialchars($data); 
   } 
   else 
   { 
     $res_data = false; 
   };// 
   return $res_data; 
 }//func 
  
 $test_data = Array(); 
 $test_data[] = '<p>P1</p>'; 
 $test_data[] = Array('<p>P21</p>', '<p>P22</p>'); 
 $test_data[] = '<p>P3</p>'; 
 $test_data[] = $test_data; 
  
 echo '<pre>'; 
 print_r(processStringRecursive($test_data)); 
 echo '</pre>';
Как строчку
PHP:
if ($v ссылается или содержит $data)
перевести на php?
 

dimagolov

Новичок
drwhite, ну сам себя массив содержать то не может. ну а если ссылка, то ее кто-то туда запихнул. не проще ли такого не создавать, чем разбираться в том, что такое присутствует?
 

drwhite

Новичок
По ходу ни на одном из 4 форумов никто не знает можно ли проверить рекурсивную ссылку в пхп =)
 

Black Raven

Новичок
[govnocode]
$a = array(1,2,3);
$a[] =& $a;

echo strpos(print_r($a, true), '*RECURSION*');
[/govnocode]

:-D

только смеха ради! не повторять!
 

dimagolov

Новичок
drwhite, видимо на 4-х форумах нету никого настолько альтернативно одаренного, чтобы делать циклические ссылки.
 

drwhite

Новичок
«Ошибиться может компьютер, люди никогда не ошибаются…» =)

Сделать циклическую ссылку в объекте с использованием массива объектов может метод объекта, динамически инстанцированного другим объектом в зависимости от … и т. д.

Можно, конечно, проверять тип добавляемого в массив объекта, но это не всегда можно сделать.
 

HraKK

Мудак
Команда форума
Почему-то на 4 форумах никто ни разу с таким не сталкивался. Подумайте, скорее всего (99.998%) ошибка проектирования или составления алгоритма.
 

drwhite

Новичок
Возможно, но print_r и var_dump каким-то образом это вычисляют и показывают, почему бы не быть такой функции, которая проверяет есть ли в массиве элемент, который содержит сам себя?
 

dimagolov

Новичок
drwhite, в отличии от программы на php print_r и var_dump оперируют с физическими указателями в памяти и могут отследить рекурсию. чисто из соображений безопастности, ни из каких других.
 
Сверху