1

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

Как выявить рекурсию в массиве, чтобы не писать в рекурсивных функциях счетчик вложенности уровня?

 function processStringRecursive($data = '') 
 { 
   if(is_array($data)) 
   { 
     foreach($data as $k => $v) 
     { 
       если ($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>';

Как строчку

if ($v ссылается или содержит $data)

перевести на php?

____________________________

2

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

drwhite
Не понял что вы имели в виду под "ссылается или содержит". Часть массива не может содержать весь массив. Если подразумевается идентичность частей массива, то их необходимо просто сравнить.

3

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

$test_data = Array(); 
$test_data[] = 'v1'; 
$test_data[] = $test_data;

print_r($test_data);

print_r отловит рекурсию во втором элементе и напечатает

Array
(
  0 => 'v1;
  1 => Array
*RECURSION*
)

Можно ли отловить эту рекурсию внутри foreach и написать continue?

____________________________

4

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

У меня вывод обычный. Даже не знаю как такое сделать.

Array
(
    [0] => v1
    [1] => Array
        (
            [0] => v1
        )

)