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

Как вы проверяете переменную для циклических ссылок?

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

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

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

Если вы хотите создать быструю циркулярную ссылку, сделайте следующее:

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

Ответ 1

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

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

Ответ 2

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

<?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

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