0

print_r(debug_backtrace(), true) を使用して、デバッグ バックトレースの文字列表現を取得しています。print_r は再帰を処理するため、これは正常に機能します。

debug_backtrace() の戻り値の配列を文字列に変換する前に再帰的に反復しようとすると、再帰が発生し、終了しませんでした。

バックトレース配列から特定の重要なキーと値のペアを削除する簡単な方法はありますか? おそらく、print_r を使用して配列を文字列に変換し、再帰位置を文字列RECURSIONに変更して配列に戻す何らかの方法で、反復処理を行うことができます。

可能であれば、文字列表現に対して正規表現を実行したくありません。

4

1 に答える 1

1

あはは... debug_backtrace配列をシリアライズしてすぐにアンシリアライズすると、結果の配列には元の配列の再帰参照がなくなり、安全に再帰的に反復できることがわかりました。

$backtrace = debug_backtrace();
$backtrace = serialize($backtrace);
$backtrace = unserialize($backtrace);

recursive_sanitization_func($backtrace);

編集:わかりました、これは完全な解決策ではありません。再帰的なオブジェクト参照 (失われる) では機能しますが、再帰的な配列 (保持される) では機能しません。

私の現在の解決策は、上記のようにシリアル化/非シリアル化してから、ここで説明されているような再帰検出関数を介して結果の配列を実行することです: http://www.php.net/manual/en/ref.array.php#96914

もっと簡単なものがあればいいのにと思いますが、他の誰かがより良い解決策を考え出さない限り、今のところこれで十分です。

于 2010-04-16T15:40:28.810 に答える