рекурсия как в print_r ...

netdog

net @
рекурсия как в print_r ...

У меня мозг стопорит при рекурсии да еще и ночью...;)
хочу сделать print_r() == my print_r() (так ... для собственного развития )
Но такая трабла, не получается как надо, выставить пробеллы, а вернее табы (\t), автоматом...

Набросал такой код:
PHP:
<pre>
<?php
$arr = array(1, array(a,b, array(Y,Z) ),3 );

function show_arr($arr,$i='')
{
 foreach($arr as $key=>$value)
  {
  echo $i."[".$key."] => ";

 if (is_array($value))
  {
  
  echo "Array\n"; //  - Тут везде одинарные слеши в \n и \t. форум всунул...
  show_arr($value,$i.="\t");
  }
  else
  {echo $value."\n";}

  }
}
show_arr($arr);


?>


[b]Выводит:[/b]
[0] => 1
[1] => Array
	[0] => a
	[1] => b
	[2] => Array
		[0] => Y
		[1] => Z
	[b][2] => 3[/b] 


[b]А надо получить:[/b]
Array
(
    [0] => 1
    [1] => Array
        (
            [0] => a
            [1] => b
            [2] => Array
                (
                    [0] => Y
                    [1] => Z
                )

        )

    [2] => 3
)
 

Unregistered-2

Guest
PHP:
function print_massiv($m,$v=array('GLOBALS'), $d=1)
{
$tab="";
$tab_atom="&nbsp;&nbsp;&nbsp;";
$tab=str_repeat($tab_atom,$d); // отбиваем отступы - зависит от глубины вложенности
echo "<BR>\n";
foreach($m as $key=>$val)
 {
  echo $tab."<SPAN class=d".$d.">[".htmlspecialchars($key)."] => </SPAN>";
  if (!is_array($val)) 
   {
     echo "<SPAN class=d".$d.">".htmlspecialchars($val)."</SPAN><BR>\n";
   }
  elseif(!empty($val))
   {
    if (in_array($key,$v)) 
	  {
		echo "<SPAN class=d0>* РЕКУРСИЯ *</SPAN><BR>\n";
	  }
	else 
	  {
		$v[]=$key; 
        print_massiv($val,$v, ++$d); --$d;
      }
    }
  else 
	{
	  echo "<BR>"; 
	}
}
} // end func
вооот у меня так это выглядит :)
 

Unregistered-2

Guest
Э... чуть не забыл...
PHP:
<STYLE TYPE="text/css">
<!--
<?php 
$colors=array("#FF6666","#CCCCCC","#CCFFCC", "#CCCCFF", "#FFCCCC", "#FFFFCC", "#FFCCFF","#CCFFFF"); 
foreach ($colors as $key=>$val)
{
echo ".d".$key." {background-color: ".$val.";} \n";
}
?>
-->
</style>
[PHP]
 

netdog

net @
>show_arr($GLOBALS) ;
>Что выведет ?
Ну это правится 1 строкой :)

> ... str_repeat($tab_atom,$d);
О блин, thx, направил ну путь истенный... ;)
 

tony2001

TeaM PHPClub
передавать в функцию уровень, в зависимости от него выставлять табуляции.
PHP:
function my_print_r($var, $level=0) {
  $tabs = str_repeat("\t",$level);
//...
}
 
Сверху