2013-06-19 6 views
5

Как вы проверяете переменную для круговых ссылок?Проверка, если переменная содержит круглые ссылки

Я использую функцию PHP var_export() с аргументом возвращаемой строки, установленным в true.

Я нашел это Warning: var_export does not handle circular references и задавался вопросом, знал ли кто-нибудь о способе проверить, содержит ли переменная круглую ссылку, чтобы я мог использовать ее, прежде чем пытаться использовать на ней var_export.

Я знаю, что var_export выводит PHP eval-способный текст, который можно использовать для воссоздания массива, и хотя я не использую его для этого, я все еще хочу использовать эту функцию, когда она доступна, потому что выходной формат соответствует моим потребностям , var_dump не является вариантом, потому что он не принимает аргумент, чтобы возвращать строку. Я знаю, что я мог бы буферизовать вывод var_dump, который грамотно обрабатывает циклические ссылки и сохраняет содержимое буфера в переменной, но я просто хочу знать, знает ли кто-нибудь о способе тестирования таких ссылок в переменной.

Если вы хотите, чтобы быстро создать циклическую ссылку сделать это:

$r = array(); 
$r[] = &$r; 
var_export($r, true); 

ответ

0

ли это делать?

function isRecursive($array) { 
    foreach($array as $v) { 
     if($v === $array) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Это возвращает фатальную ошибку для меня – BIOS

+0

Что такое фатальная ошибка? –

+0

«Уровень вложенности слишком глубокий» – BIOS

3

Hacky, но возвращает истинный основанный на круговом примере вы дали:

<?php 
// create the circular reference 
$r = array(); 
$r[] = &$r; 

function isRecursive($array){ 
    $dump = print_r($array, true); 
    if(strpos($dump, '*RECURSION*') !== false) 
     return true; 
    else 
     return false; 
} 

echo isRecursive($r); // returns 1 

Заинтересованы, чтобы увидеть, что еще люди придумали :)

Смежные вопросы