What is the difference between var_dump() and print_r() in terms of spitting out an array as string?
14 Answers
The var_dump function displays structured information about variables/expressions including its type and value. Arrays are explored recursively with values indented to show structure. It also shows which array values and object properties are references.
The print_r() displays information about a variable in a way that's readable by humans. array values will be presented in a format that shows keys and elements. Similar notation is used for objects.
Example:
$obj = (object) array('qualitypoint', 'technologies', 'India');
var_dump($obj) will display below output in the screen.
object(stdClass)#1 (3) {
 [0]=> string(12) "qualitypoint"
 [1]=> string(12) "technologies"
 [2]=> string(5) "India"
}
And, print_r($obj) will display below output in the screen.
stdClass Object ( 
 [0] => qualitypoint
 [1] => technologies
 [2] => India
)
More Info
- 
                    87print_r(null) will return nothing where as var_dump(null) returns NULL which is useful when debugging – rosh3000 Oct 02 '13 at 12:29
- 
                    8Can you extend your answer with 'var_export'? – joryl Mar 23 '16 at 14:42
- 
                    1Two advantages of var_dump() is that the dumped information automatically is enclosed in a pre element. When using var_dump() you can see that each type has its own color. Enhancing readability. – Julian Sep 05 '16 at 13:04
- 
                    4@Julian only if xdebug is installed – Leif Neland Nov 09 '16 at 20:43
Generally,  print_r( ) output is nicer, more concise and easier to read, aka more human-readable but cannot show data types. 
With print_r() you can also store the output into a variable:
$output = print_r($array, true);
which var_dump() cannot do. Yet var_dump() can show data types.
 
    
    - 60,309
- 67
- 216
- 347
 
    
    - 1,832
- 4
- 19
- 26
- 
                    9var_dump() can be stored in a variable though it's a bit uglier: http://stackoverflow.com/questions/139474/how-can-i-capture-the-result-of-var-dump-to-a-string – SgtPooki Feb 12 '13 at 15:15
- 
                    7you can also it's 'brother' [var_export()](http://www.php.net/manual/en/function.var-export.php) if you need saving – CSᵠ Apr 06 '13 at 10:32
var_dump() will show you the type of the thing as well as what's in it.
So you'll get => (string)"var" Example is here.
print_r() will just output the content.
Would output => "var" Example is here.
 
    
    - 10,148
- 7
- 57
- 107
 
    
    - 11,756
- 13
- 61
- 100
- 
                    12I think the better example would be `var_dump(0.0);` which outputs `float(0)` vs `print_r(0.0);` which outputs `0` (hence leading to possible type confusion)... – ircmaxell Aug 04 '10 at 13:57
If you're asking when you should use what, I generally use print_r() for displaying values and var_dump() for when having issues with variable types.
 
    
    - 674
- 7
- 22
var_dump displays structured information about the object / variable. This includes type and values. Like print_r arrays are recursed through and indented.
print_r displays human readable information about the values with a format presenting keys and elements for arrays and objects.
The most important thing to notice is var_dump will output type as well as values while print_r does not.
 
    
    - 28,364
- 20
- 86
- 132
It's too simple. The var_dump() function displays structured information about variables/expressions including its type and value. Whereas The print_r() displays information about a variable in a way that's readable by humans.
Example: Say we have got the following array and we want to display its contents.
$arr = array ('xyz', false, true, 99, array('50'));
print_r() function - Displays human-readable output
Array
(
    [0] => xyz
    [1] =>
    [2] => 1
    [3] => 99
    [4] => Array
        (
            [0] => 50
        )
)
var_dump() function - Displays values and types
array(5) {
  [0]=>
  string(3) "xyz"
  [1]=>
  bool(false)
  [2]=>
  bool(true)
  [3]=>
  int(100)
  [4]=>
  array(1) {
    [0]=>
    string(2) "50"
  }
}
For more details: https://stackhowto.com/how-to-display-php-variable-values-with-echo-print_r-and-var_dump/
 
    
    - 785
- 8
- 7
Significant differences between var_dump and print_r
both the functions dumps information about the variable, but var_dump multiple parameters which will be dumped, where as print_r can take two parameters out of which first parameter is the variable you want to dump and second is a boolean value.
var_dump can't return any value it can only dump/print the values where as print_r can return the variable information if we set second parameter of print_r to true. The returned value of print_r will be in string format. 
The information printed by print_r is much more in readable format where as var_dump prints raw values.
print_r function can be used in many contexts where as var_dump can be used in debugging purposes mainly since it can't return value.
 
    
    - 8,151
- 8
- 50
- 58
- 
                    1[`vardump`](http://php.net/manual/en/function.var-dump.php) takes one **or more** arguments, and each will be dumped. – bishop Sep 29 '15 at 17:29
- 
                    @bishop , yes you are correct it can take more arguments, but it doesn't return any value – Akshay Khale Oct 01 '15 at 07:22
- 
                    
- 
                    
- 
                    "var_dump can't return any value"? Yes it can. Kinda. `ob_start(); var_dump($var); $dump=ob_get_clean();` – Sinus the Tentacular Sep 27 '19 at 19:58
I'd aditionally recommend putting the output of var_dump() or printr into a pre tag when outputting to a browser.
print "<pre>";
print_r($dataset);
print "</pre>";
Will give a more readable result.
 
    
    - 121
- 4
var_dump($var) shows in-depth details, by providing  additional details of 
- data type of the value (including the descendant elements)
- number of elements in a variable
- length of the value
 
    
    - 307
- 1
- 9
- 22
With large arrays, print_r can show far more information than is useful. You can truncate it like this, showing the first 2000 characters or however many you need.
  echo "<pre>" . substr(print_r($dataset, 1), 0, 2000) . "</pre>";
 
    
    - 51
- 5
var_dump() :-
- This function displays structured information about one or more expressions that includes its type and value. Arrays and objects are explored recursively with values indented to show structure.
- This function display number of element in a variable.
- This function display length of variable.
- Can't return the value only print the value.
- it is use for debugging purpose.
Example :-
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>
output :-
   array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}
print_r() :-
- Prints human-readable information about a variable.
- Not display number of element in a variable as var_dump().
- Not display length of variable in a variable as var_dump().
- Return the value if we set second parameter to true in printf_r().
Example :-
<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>
Output:-
<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>
 
    
    - 804
- 8
- 9
- 
                    1"Can't return the value only print the value." Yes it can. Kinda. `ob_start(); var_dump($var); $dump=ob_get_clean();` – Sinus the Tentacular Sep 27 '19 at 19:57
We can pass multiple parameters with var_dump like:
var_dump("array1",$array1,"array2",$array2);
 
    
    - 259
- 3
- 13
For all who needs the var_dump() function for testing!
I've written my own test dump function, cause i didn't whant to do that ob_start ... stuff over and over again. The nice thing, it even get's the parameter names from source!function test_dump (...$params)
{
    
    $file_test_dump = 'test_dump.log';
    $backtrace = debug_backtrace(0, 3);
    $caller_file        = $backtrace[0]['file']);  
    $caller_function    = $backtrace[1]['function'];
    $caller_line        = $backtrace[0]['line'];
    if (empty($params))
    {
        file_put_contents ($file_test_dump, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" , FILE_APPEND);
        file_put_contents ($file_test_dump, '!!!!!! ' . date ("[Y-m-d H:i:s:u]", time()) . " - FILE: {$caller_file} | FUNCTION: {$caller_function} | LINE: {$caller_line} !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \n\n" , FILE_APPEND);
        file_put_contents ($file_test_dump, "!!! No parameter given !!! \n\n" , FILE_APPEND);
        return;
    }
    
    
    // --- get source file ---
    $source_file = file($backtrace[0]['file']);
    
    // --- get line of source file and pre filter with regex ---
    preg_match ('~\(([^*]*)\)~', $source_file [intval($backtrace[0]['line']) - 1], $parameter_line);
    $parameter_line_filtered = str_replace(" ", "", $parameter_line [1]);
    // put parameter names into array
    $params_names = explode(',', $parameter_line_filtered);
    // --- OUTPUT   ----
    
    file_put_contents ($file_test_dump, "#######################################################################################################################################################################################################################\n" , FILE_APPEND);
    file_put_contents ($file_test_dump, '### ' . date ("[Y-m-d H:i:s:u]", time()) . " - FILE: {$caller_file} | FUNCTION: {$caller_function} | LINE: {$caller_line} ### \n\n" , FILE_APPEND);
    
    
    $i = 0;
    
    foreach ($params as $param)
    {
        $i++;
        file_put_contents ($file_test_dump, "   --- Parameter " . $i . ': ' . $params_names[$i - 1] . " --------------------------------------------------------------------------------------------------------------------------\n", FILE_APPEND);
        if (    is_array($param)    ||
                is_object($param) ||
                is_bool($param) )
        {
            ob_start();
            var_dump($param);
            file_put_contents ($file_test_dump, ob_get_contents() . "\n\n", FILE_APPEND);
            ob_end_clean();
        }
        else
        {
            file_put_contents ($file_test_dump, $param . "\n\n", FILE_APPEND);
        }
    }
    file_put_contents ($file_test_dump, "\n\n", FILE_APPEND);
}
 
    
    - 103
- 1
- 9
print_r() and var_dump() are Array debugging functions used in PHP for debugging purpose. print_r() function returns the array keys and its members as Array([key] = value) whereas var_dump() function returns array list with its array keys with data type and length as well e.g Array(array_length){[0] = string(1)'a'}.
 
    
    - 1
- 3
- 
                    They are not array debugging functions. Both accept mixed expression that can be array but it also be something else (simple type, object, etc) – blahy Aug 06 '20 at 18:14
 
     
    