使PHP的var_dump()函数的值每行显示一个值

85

当我使用 var_dump($_variable) 输出变量信息时,我得到了一行很长的、包含所有变量及其值的输出结果

["kt_login_user"]=>  string(8) "teacher1" ["kt_login_id"]=>  string(3) "973" ["kt_campusID"]=>  string(4) "9088" ["kt_positionID"]=>  string(1) "5" 

有没有办法让每个值都显示在自己的一行上以便更容易阅读?就像这样:

["kt_login_user"]=>  string(8) "teacher1" 
["kt_login_id"]=>  string(3) "973" 
["kt_campusID"]=>  string(4) "9088" 
["kt_positionID"]=>  string(1) "5"

6
你尝试过在var_dump()周围加上<pre>标签吗? - Amber
14个回答

143
是的,试着用<pre>标签包裹它,例如:
echo '<pre>' , var_dump($variable) , '</pre>';

4
我们以为只有我们这样做! - Felipe
5
我倾向于使用print_r()函数来查看数组。 - phirschybar
28
错误的答案得到了32个点赞……var_dump不会返回任何东西,它直接输出。以上代码针对变量 $variable,如果其值为42,则会输出以下内容:int(42)<pre></pre>请自行查看)。 - Christian
1
@Christian,您能否解释一下在什么情况下echo '<pre>' , var_dump($variable) , '</pre>';会输出int(42) <pre></pre>?因为我无法在PHP 8.0中重现它,如您在这里https://prnt.sc/203s1yt所看到的,它输出了`<pre>int(42)\n</pre>。在此处,echo`是一个语句而不是函数,并且它总是按顺序调用/评估每个语句块,它不会在打印之前评估所有值,它立即开始向流打印。所以,您是错误的,而不是答案。 - Christos Lytras
1
@Christian,请不要生气;我只是回复我所看到的内容。如果你的评论已经过时,那么我建议你删除它,因为它会误导人们。为什么你要假设每个人都应该打开你评论中的链接来得出结论,即一个获得28个赞的评论已经过时,不反映当前答案的状态呢? - Christos Lytras
显示剩余5条评论

44

通常我有一个很好的函数来处理数组输出,只是为了在调试时使其更加美观。

function pr($data)
{
    echo "<pre>";
    print_r($data); // or var_dump($data);
    echo "</pre>";
}

然后只需调用它

pr($array);
如果您有一款编辑器能够保存代码片段,以便更快地访问它们,那么您可以使用它,而不是为每个项目或每个需要进行快速测试的页面创建一个函数。
对于print_r
echo "<pre>", print_r($data, 1), "</pre>";

对于var_dump()

echo "<pre>", var_dump($data), "</pre>";

我在PHP Storm中使用上述内容。 我已将其设置为pr选项卡命令。


3
提示:pr()中的代码可以进一步简化为echo '<pre>' . print_r($data, true) . '</pre>'; - Christian

16

我也对这个问题进行了研究,但没有找到正确的答案。这对我不起作用:

echo '<pre>' . var_dump($variable) . '</pre>';

这不会为我提供一个带有换行符的漂亮的数组显示(我正在使用Firefox 31.3.0)。

然而,经过一些尝试,这个问题得到了解决(注意php代码在一开始就被关闭了):

... ?> <pre><?php echo var_dump($variable) ?></pre> <?php ...

这解决了我的问题,并在浏览器上为我显示了一个漂亮的、易于阅读的数组。你看, <pre>标签并没有被包裹在 PHP 中,只有 echo var_dump 部分是。


2
提示:下次,阅读手册var_dump从不返回转储的值,这就是为什么您的第二个示例起作用的原因...但是您仍然不需要执行echo var_dump.....这也可以工作:echo '<pre>'; var_dump($variable); echo '</pre>';或者这样:<pre><?php var_dump($variable); ?></pre> - Christian
它没有起作用是因为你使用了句点而不是逗号。 - CChoma

14
如果您已安装了 XDebug,则可以使用它的 var_dump 替代品。引用原话如下:

Xdebug 替换了 PHP 的 var_dump() 函数以显示变量。Xdebug 版本包括不同类型的颜色,并限制数组元素/对象属性、最大深度和字符串长度的数量。还有几个其他处理变量显示的函数。

您可能需要调整以下设置:

有一些控制 Xdebug 修改后的 var_dump() 函数输出的设置:xdebug.var_display_max_children、xdebug.var_display_max_data 和 xdebug.var_display_max_depth。这三个设置的影响最好通过示例展示。以下脚本运行四次,每次使用不同的设置。您可以使用选项卡查看区别。

但请记住,即使仅加载,XDebug 也会显着减慢您的代码速度。在生产服务器上运行不可取。但是,您毕竟不会在生产服务器上进行 var_dump 操作,对吧?


它运行了,在新的更新中它被关闭了,但现在它只显示有限深度的数组。 - Towhid
1
@Towhid https://dev59.com/Y2kw5IYBdhLWcg3wSorA :) - dm03514

11

var_export 可以提供漂亮的输出。下面是文档中的示例:

$a = array (1, 2, array ("a", "b", "c"));
echo '<pre>' . var_export($a, true) . '</pre>';

将输出:

array (
  0 => 1,
  1 => 2,
  2 => 
  array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
  ),
)

只有当第二个参数为“true”时,这才有效。我已经更新了答案以反映这一点。 - Christian
非常好!谢谢! - d8ta
1
这个很好用,其他的建议对我都没用。非常感谢。 - Joshi

10

对我来说,正确的答案是

echo '<pre>' . var_export($var, true) . '</pre>';

由于var_dump($var)var_export($var)不返回字符串,因此您必须使用var_export($var, true)来强制var_export将结果作为值返回。


这个问题已经在几个月前得到了回答,所以不需要再添加了。点赞现有的答案即可使页面更有用。 - Gordon

7

你可以按下Ctrl+U查看源代码。大多数浏览器会美化输出。

var_dump是最丑陋的调试方式。


7

使用输出缓冲区:http://php.net/manual/de/function.ob-start.php

<?php
    ob_start();
    var_dump($_SERVER) ;
    $dump = ob_get_contents();
    ob_end_clean();

    echo "<pre> $dump </pre>";
?>

另一个选择是使用输出缓冲并将倾印中的所有换行符转换为<br>元素,例如:

ob_start();
var_dump($_SERVER) ;
echo nl2br(ob_get_clean());

1
提示:您可以使用$dump = ob_get_clean();来代替$dump = ob_get_contents(); ob_end_clean(); - Christian
你可以不用将它包裹在pre元素中,而是直接使用 echo nl2br($dump) - Gordon

4

个人而言,我喜欢Symfony的变量转储组件提供的替换功能。

使用composer require symfony/var-dumper进行安装,然后只需使用dump($var)即可。

它会处理其余部分。我相信还有一些注入JS,可以让您与输出互动。


1

我做了类似的解决方案。我创建了一个片段来替换'vardump',代码如下:

foreach ($variable as $key => $reg) {
    echo "<pre>{$key} => '{$reg}'</pre>";
}
var_dump($variable);die;

Ps: 我正在重复使用上一个 var_dump 的数据来获取文件名和行号

所以这个: enter image description here 变成了这个: enter image description here

如果这对您有帮助,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接