Ага ... выяснилось, что если я сериализирую массив 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
Хотелось бы, чтобы было что-то более прямолинейное, но это меня пока удерживает, если кто-то другой не придумает лучшего решения.