8

如何测试循环引用的变量?

我正在使用 PHP 的var_export()函数,并将返回字符串参数设置为true.

我发现了这一点Warning: var_export does not handle circular references,并想知道是否有人知道一种方法来测试变量是否包含循环引用,以便我可以在尝试使用它之前使用var_export它。

我知道var_export输出可用于重新创建数组的 PHP eval-able 文本,即使我没有使用它,我仍然想在可用时使用此函数,因为输出格式满足我的需要。var_dump不是一个选项,因为它不接受返回字符串的参数。我知道我可以缓冲var_dump处理循环引用的输出并将缓冲区内容保存到变量中,但我真的只想知道是否有人知道在变量中测试此类引用的方法。

如果要创建快速循环引用,请执行以下操作:

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

2 回答 2

6

Hacky but returns true based on the circular example you gave:

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

Interested to see what else people come up with :)

于 2013-06-19T01:51:27.820 回答
0

这会做吗?

function isRecursive($array) {
    foreach($array as $v) {
        if($v === $array) {
            return true;
        }
    }
    return false;
}
于 2013-06-19T01:24:57.837 回答