Створення в хелпері Debug методу "tree_toggle"

Часто є бажання проглянути масив у деревоподібному вигляді. Для цього можна зробити, наприклад слідуюче:

<?php
$arr = array(1, array('key_1'=>5,'key_2'=>6),3, array('key_22'=>5,'key_33'=>6));
DEBUG::vars($arr);
?>
Мінус в такому способі відображення проявляється при спробі переглянути складний багатовимірний масив. Саме для полегшення сприйняття такого масиву я вирішив створити хелпер для фрейморка Кохана.

Для цього знайшов корисний скриптик в інтернеті, створив файл APPPATH/classes/debug.php із наступним кодом:

<?php defined('SYSPATH') or die('No direct script access.');

class Debug extends Kohana_Debug {
		public static function tree_toggle($arr)
    {
		$out = print_r($arr, true);

		// replace something like '[element] => <newline> (' with <a href="javascript:toggleDisplay('...');">...</a><div id="..." style="display: none;">
		$out = preg_replace('/([ \t]*)(\[[^\]]+\][ \t]*\=\>[ \t]*[a-z0-9 \t_]+)\n[ \t]*\(/iUe',"'\\1<a href=\"javascript:toggleDisplay(\''.(\$id = substr(md5(rand().'\\0'), 0, 7)).'\');\">\\2</a><div id=\"'.\$id.'\" style=\"display: none;\">'", $out);

		// replace ')' on its own on a new line (surrounded by whitespace is ok) with '</div>
		$out = preg_replace('/^\s*\)\s*$/m', '</div>', $out);

		// print the javascript function toggleDisplay() and then the transformed output
		return '<script language="Javascript">function toggleDisplay(id) { document.getElementById(id).style.display = (document.getElementById(id).style.display == "block") ? "none" : "block"; }</script>'."\n"
		.'<style type="text/css">
			.create{color: green; font-weight: bold;}
			.invalid{color: brown; font-weight: bold;}
		</style>'
		."\n<pre>$out</pre>";
    }
}
Хелпер повертає текст із лінками на заголовках масивів, а також javascript, який розгортає дерево масиву при кліках на лінках. Використання хелпера:
<?php
$arr = array(1, array('key_1'=>5,'key_2'=>6),3, array('key_22'=>5,'key_33'=>6));
echo Debug::tree_toggle($arr);
?>
Даний код виведе:
Array
(
    [0] => 1
    [1] => Array
    [2] => 3
    [3] => Array
Якщо ви знайшли помилку, прохання - виділіть текст помилки (максимум 127 символів) і натисніть Ctrl+Enter.