8

変数の循環参照をどのようにテストしますか?

var_export()戻り文字列引数を に設定して PHP の関数を使用していtrueます。

私はそれを見つけてWarning: var_export does not handle circular references、変数に循環参照が含まれているかどうかをテストして、使用する前に使用できるようにする方法を誰かが知っているかどうか疑問に思っていvar_exportました。

配列を再作成するために使用できるPHPの評価可能なテキストを出力することを知っています。var_exportそのために使用していませんが、出力形式がニーズを満たしているため、利用可能な場合はこの関数を使用したいと考えています。var_dump代わりに文字列を返す引数を受け入れないため、オプションではありません。循環参照を適切に処理する出力をバッファリングしvar_dump、バッファの内容を変数に保存できることは承知していますが、変数内のそのような参照をテストする方法を誰かが知っているかどうかを知りたいだけです。

クイック循環参照を作成する場合は、次のようにします。

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

2 に答える 2

6

ハッキーですが、指定した循環例に基づいて 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

人々が他に何を思い付くかを見ることに興味があります:)

于 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 に答える