77

当我回显 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"
4

14 回答 14

122

是的,尝试用 包装它<pre>,例如:

echo '<pre>' , var_dump($variable) , '</pre>';
于 2012-04-12T01:01:15.173 回答
40

我通常有一个很好的函数来处理数组的输出,只是为了在调试时让它变得漂亮一点。

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选项卡命令。

于 2012-04-12T01:11:05.893 回答
16

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

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

这不会为我提供一个很好的数组显示,带有换行符(我使用的是 Firefox 31.3.0)

然而,经过一些实验,这解决了这个问题(注意 php 一开始是关闭的):

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

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

于 2014-12-04T22:09:06.840 回答
13

如果你安装了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_dumping,是吗?

于 2012-07-09T12:41:49.790 回答
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',
  ),
)
于 2016-02-04T10:00:07.400 回答
10

对我来说正确的答案是

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

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

于 2016-06-10T13:41:05.600 回答
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());
于 2015-08-05T08:48:39.070 回答
7

您可以按Ctrl+U查看源代码。大多数浏览器都会在那里美化输出。

var_dump是最丑的调试方式。

于 2016-02-15T14:44:47.577 回答
2

个人比较喜欢Symfony 的 var dumper 组件提供的替换功能

安装composer require symfony/var-dumper并使用dump($var)

它负责其余的工作。我相信那里还注入了一些 JS 以允许您与输出进行一些交互。

于 2018-04-05T21:03:17.500 回答
1

我真的很喜欢 var_export()。如果您喜欢可复制/粘贴的代码,请尝试:

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

甚至像这样的颜色语法突出显示:

highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");
于 2017-06-28T11:46:34.723 回答
1

我做了类似的解决方案。我创建了一个片段来替换“vardump”:

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

Ps:我正在用最后一个 var_dump 重复数据以获取文件名和行

所以这个: 在此处输入图像描述 变成了这个: 在此处输入图像描述

让我知道这是否对您有帮助。

于 2017-10-26T11:59:32.563 回答
1

对于需要在视图源代码CLI中工作的开发人员,在调试单元测试时特别有用。

echo vd([['foo'=>1, 'bar'=>2]]);

function vd($in) {
  ob_start(); 
  var_dump($in);
  return "\n" . preg_replace("/=>[\r\n\s]+/", "=> ", ob_get_clean());
}

产量:

array(1) {
  [0] => array(2) {
    'foo' => int(1)
    'bar' => int(2)
  }
}
于 2017-09-28T00:18:16.113 回答
0

将其包装在<pre>标签中以保留格式。

于 2012-04-12T01:01:27.543 回答
0

我不想停止使用var_dump($variable);die();和使用pre标签和循环对我来说似乎有点过头了,所以因为我在浏览器中查看转储,所以我只需右键单击页面并选择检查(我使用 Chrome)。Developer Tools 的 Elements 部分以非常易读的格式显示变量。

于 2017-11-29T21:38:37.643 回答