2013-06-19 10 views
5

循環参照の変数をテストするにはどうすればよいですか?変数に循環参照が含まれているかどうかのテスト

私はtrueに設定されたリターン文字列引数を持つPHPのvar_export()関数を使用しています。

私はvar_exportを使用しようとする前に、変数に循環参照が含まれているかどうかテストする方法を知っていたのだろうかと疑問に思っていました。

var_exportは、配列を再作成するために使用できるPHPの評価可能なテキストを出力していますが、私はそれを使用していませんが、出力フォーマットが自分のニーズを満たしているので。 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

これを思い付く他に何を見て

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

興味があることは何ですか – BIOS

+0

私にとって致命的なエラーを返します。致命的なエラー? –

+0

'ネストレベルが深すぎます' – BIOS

3

ハックしかし、あなたが与えた円形の例をもとにtrueを返します:人々は:)

関連する問題