PHP’s print_r function in JavaScript

2009 February 25
by Clifford James

This function simulates the print_r function in PHP.

Download: Link.

function print_r(obj,pre,child)
{
  if(pre === undefined)   pre   = false;
  if(child === undefined) child = 0;

  var n  = "\n";
  var t  = "    ";
  var ts = "";

  if(pre) for(var i = 0; i <= child; i++) ts += t;

  if(obj.constructor == Array || obj.constructor == Object)
  {
    if(pre && child == 0)
    {
      document.write('<pre>'+n);
      document.write('Array'+n);
      document.write('('+n);
    }
    else if(pre && child > 0)
    {
      document.write(ts+'('+n);
    }
    else
    {
      document.write('Array (');
    }

    for(var value in obj)
    {
      if(obj[value].constructor == Array|| obj[value].constructor == Object)
      {
        var newChild = child + 1;

        if(pre && child == 0)
        {
          document.write(ts+'['+value+'] => Array'+n);
        }
        else if(pre && child > 0)
        {
          document.write(ts+t+'['+value+'] => Array'+n);
          newChild++;
        }
        else
        {
          document.write(" ["+value+"] => ");
        }

        print_r(obj[value],pre,newChild);
      }
      else
      {
        if(pre && child == 0)
        {
          document.write(t+'['+value+'] => '+obj[value]+n);
        }
        else if(pre && child > 0)
       {
          document.write(ts+t+'['+value+'] => '+obj[value]+n);
        }
        else
        {
          document.write(' ['+value+'] => '+obj[value]+' ');
        }
      }
    }

    if(pre && child == 0)
    {
       document.write(') ');
       document.write('</pre>');
    }
    else if(pre && child > 0)
    {
      document.write(ts+') '+n);
    }
    else
    {
      document.write(') ');
    }
  }
}

Usage:
When you want to nicely format the array with the pre tags, set true after the array parameter in the function.

var array = new Array();
array[0] = 'test0';
array[1] = 'test1';
array[2] = new Array('test2','test3');
array[3] = new Array('test4',new Array('test5','test6'));
array[4] = new Array('test7',new Array('test8',new Array('test9','test10')));

print_r(array);

print_r(array,true);

Output:

Array ( [0] => test0 [1] => test1 [2] => Array ( [0] => test2 [1] => test3 ) [3] ...

Array
(
    [0] => test0
    [1] => test1
    [2] => Array
        (
            [0] => test2
            [1] => test3
        )
    [3] => Array
        (
            [0] => test4
            [1] => Array
                (
                    [0] => test5
                    [1] => test6
                )
        )
    [4] => Array
        (
            [0] => test7
            [1] => Array
                (
                    [0] => test8
                    [1] => Array
                        (
                            [0] => test9
                            [1] => test10
                        )
                )
        )
)
One Response leave one →
  1. 2009 April 22
    James permalink

    Very handy, thank you! One tiny modification I made to make the output easier to sift through was to add, right after line 64, a line-break to follow each array element:

    document.write (”);

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS