PHP var_dump()与print_r()


297

var_dump()print_r()将数组作为字符串吐出之间有什么区别?

Answers:


355

var_dump函数显示有关变量/表达式的结构化信息,包括其类型。递归地探索数组,并缩进显示结构的值。它还显示了哪些数组值和对象属性是引用。

print_r()约的方式,是由人类可读的可变显示的信息。数组值将以显示元素的格式显示。类似的符号用于对象。

例:

$obj = (object) array('qualitypoint', 'technologies', 'India');

var_dump($obj) 将显示在屏幕下方的输出中。

object(stdClass)#1 (3) {
 [0]=> string(12) "qualitypoint"
 [1]=> string(12) "technologies"
 [2]=> string(5) "India"
}

并且,print_r($obj)将在屏幕上显示以下输出。

stdClass Object ( 
 [0] => qualitypoint
 [1] => technologies
 [2] => India
)

更多信息


76
print_r(null)将不返回任何内容,因为var_dump(null)返回NULL,这在调试时非常有用
rosh3000

7
您可以使用“ var_export”扩展答案吗?
joryl

1
var_dump()的两个优点是,转储的信息自动包含在前置元素中。使用var_dump()时,您可以看到每种类型都有其自己的颜色。增强可读性。
朱利安

3
@Julian仅在安装了xdebug的情况下
Leif Neland

57

通常, print_r( )输出更好,更简洁,更易于阅读,也更易于阅读,但无法显示数据类型。

随着print_r()你也可以存储输出到一个变量:

$output = print_r($array, true);

var_dump()是行不通的。还var_dump()可以显示数据类型。


9
:的var_dump()可以存储在一个变量,虽然这是一个有点丑陋stackoverflow.com/questions/139474/...
SgtPooki

7
如果需要保存,也可以将其作为“兄弟” var_export()
CSᵠ2013年

21

var_dump() 会告诉您事物的类型以及其中的内容。

因此,您将获得=> (string)"var" 示例在这里。

print_r() 只会输出内容。

将输出=> "var" 示例在这里。


12
我认为更好的例子是var_dump(0.0);哪个输出float(0)print_r(0.0);哪个输出0(因此会导致类型混淆)...
ircmaxell,2010年


8

var_dump显示有关对象/变量的结构化信息。这包括类型和值。类似的print_r数组通过递归并缩进。

print_r以格式显示键和数组和对象元素的方式显示有关值的人类可读信息。

要注意的最重要的事情是var_dump将输出类型和值,而print_r没有输出。


5

var_dump和之间的重大差异print_r

这两个函数都转储有关变量的信息,但是var_dump会转储多个参数,其中print_r可以取出两个参数,其中第一个参数是要转储的变量,第二个参数是布尔值。

var_dump不能返回任何值,它只能转储/打印值,如果我们将第二个参数设置print_rtrue,则print_r可以返回变量信息。返回的值print_r将为字符串格式。

所打印的信息print_r以可读格式显示,其中as var_dump打印原始值。

print_r函数可以在许多var_dump可以用于调试目的的环境中使用,主要是因为它不能返回值。


1
vardump接受一个或多个参数,每个参数都将被转储。
主教

@bishop,是的,您是正确的,它可以接受更多参数,但不会返回任何值
Akshay Khale 2015年

所以解决你的答案?
Govind Rai

它是固定的@GovindRai
Akshay Khale

“ var_dump无法返回任何值”?是的,它可以。金田 ob_start(); var_dump($var); $dump=ob_get_clean();
窦麦科瓦蒂

3

我强烈建议在输出到浏览器时将var_dump()或printr的输出放到pre标签中。

print "<pre>";
print_r($dataset);
print "</pre>";

将给出更具可读性的结果。


2

var_dump($var) 通过提供以下内容的其他详细信息来显示详细信息

  • 值的数据类型(包括后代元素)
  • 变量中元素的数量
  • 值的长度

1

对于大型数组,print_r可以显示远远超出有用信息的信息。您可以像这样截断它,显示前2000个字符或需要的字符数。

  echo "<pre>" . substr(print_r($dataset, 1), 0, 2000) . "</pre>";

1

var_dump():-

  1. 此函数显示有关一个或多个表达式的结构化信息,包括其类型和值。递归地探索数组和对象,并缩进显示结构的值。
  2. 此函数显示变量中元素的数量。
  3. 此功能显示变量的长度。
  4. 无法返回值,只能打印该值。
  5. 它用于调试目的。

例子:-

<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

输出:-

   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():-

  1. 打印关于变量的人类可读信息。
  2. 不将变量中的元素数显示为var_dump()。
  3. 不将变量的长度显示为var_dump()。
  4. 如果在printf_r()中将第二个参数设置为true,则返回该值。

例子:-

<pre>
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>

输出:-

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

“不能返回值,只能打印值。” 是的,它可以。金田 ob_start(); var_dump($var); $dump=ob_get_clean();
Sinus Mackowaty

0

print_r()和var_dump()是PHP中用于调试目的的数组调试功能。print_r()函数以Array([key] = value)返回数组键及其成员,而var_dump()函数返回带有数据类型和长度的数组键的数组列表,例如Array(array_length){[0] =字符串(1)'a'}。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.