使 var_dump 呈现出漂亮的外观

207

我有一个简单的$_GET[]查询变量,用于从数据库中提取查询时显示测试数据。

<?php if($_GET['test']): ?>
  <div id="test" style="padding: 24px; background: #fff; text-align: center;">  
    <table>
      <tr style="font-weight: bold;"><td>MLS</td></tr>
      <tr><td><?php echo KEY; ?></td></tr>
      <tr style="font-weight: bold;"><td>QUERY</td></tr>
      <tr><td><?php echo $data_q; ?></td></tr>
      <tr style="font-weight: bold;"><td>DATA</td></tr>
      <tr><td><?php var_dump($data); ?></td></tr>
    </table>    
</div>
<?php endif; ?>

当我使用var_dump时,结果是一个很长、无法分辨的数组字符串。有没有什么办法可以至少添加换行符或以更易读的方式显示var_dump?如果贴出后使用jQuery调整字符串,我也愿意尝试建议。


76
是的。echo '<pre>'; var_dump($data); echo '</pre>' - Amal Murali
18
这是什么魔法? - Plummer
1
使用var_masterpiece怎么样?https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl?utm_source=chrome-app-launcher-info-dialog - VijayRana
我认为当初提问时这个并不在网店里。但对于任何想了解它的人来说,值得一试。 - Plummer
2
我认为你只需要使用 print_r($data)。http://php.net/manual/zh/function.print-r.php - Drew Baker
使用Symfony dump组件 - Mostafa
16个回答

516

我非常喜欢使用var_export()函数。如果您喜欢可以复制粘贴的代码,可以尝试:

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

甚至可以使用类似这样的颜色语法高亮:

highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");

可重用的函数:

function highlight_array($array, $name = 'var') {
    highlight_string("<?php\n\$$name =\n" . var_export($array, true) . ";\n?>");
}

你可以使用 print_r() 来做同样的事情。对于 var_dump(),你只需要添加 <pre> 标签:

echo '<pre>';
var_dump($data);
echo '</pre>';

8
请注意,echovar_exporthighlight_string都是 PHP 函数,需要放在 <?php ?> 代码块内。即使 highlight_string 函数行内有 <?php ?> 对,外面也需要有一对。 - BeowulfNode42
这是 var_dump 的一个更短的变体: var_dump(highlight_string("<?\n". var_export($data, true))); - jhpg
1
很好!这非常有帮助 :) 谢谢! - Jesse James Burton
2
该死!我已经用PHP工作了15年,现在才发现这个??? :D - Ollie Brooke
3
本回答的胜者是特别指定为 highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");!!! - Elijah Lynn
1
那第二个选项非常适合做代码片段。 - Deus Arcana

51

尝试使用php的xdebug扩展。

示例:

<?php var_dump($_SERVER); ?>

输出:

输入图片描述


9
别忘了,xdebug 可以做的不仅仅是漂亮的 var_dump :) - Latheesan
我以前在使用var_dump时看到的是这样的,但现在我安装了wampserver 2.5和php 5.5.12后,我看到它没有格式化。为什么我以前能像你的照片一样看到,而不需要安装除wampserver之外的任何东西? - Limon
1
这绝对是非常性感的。不确定为什么这没有被标记为正确的解决方案,但您可以在安装过程中提供更多详细信息。在Windows上,只需使用extension=php_xdebug.dll,而不是zend_extension=/some/really/long/specific/path/xdebug.so - Kraang Prime

38

使用预格式化的HTML元素

    echo '<pre>';
        var_dump($data);
    echo '</pre>';

12

我对@AbraCadaver的回答进行了补充。 我添加了一个JavaScript脚本,可以删除PHP开始和结束标记。 这样我们将得到更干净、更漂亮的转储。

可能还有其他人也会喜欢这个。

function dd($data){
  highlight_string("<?php\n " . var_export($data, true) . "?>");
  echo '<script>document.getElementsByTagName("code")[0].getElementsByTagName("span")[1].remove() ;document.getElementsByTagName("code")[0].getElementsByTagName("span")[document.getElementsByTagName("code")[0].getElementsByTagName("span").length - 1].remove() ; </script>';
  die();
}

之前的结果:

enter image description here

现在的结果:

enter image description here

现在没有 PHP 的起始和结束标签了。


6

这里有一个备选的,积极维护的开源 var_dump 增强版:

https://github.com/php-sage/sage

它不需要任何设置,比 Xdebug 的 var_dump 和 symfony/var-dumper 更易用。

以下是使用 Kint 动态绕过转储对象大小限制的示例:

     require 'sage.phar';
     +d( $variable ); // append `+` to the dump call

这是一张截图:

kint


6

我似乎没有足够的声望来将其关闭为重复项,但如果其他人可以做到这一点,它就是一个重复项。我在PHP中更漂亮、更信息化的Var_dump替代方法?上发布了同样的内容,但为了节省时间,我也会复制/粘贴它:

我不得不在这里添加另一个答案,因为我真的不想按照其他解决方案中的步骤进行操作。它非常简单,不需要扩展、包含等等,而且我更喜欢它。它非常易于操作,速度非常快。

首先只需json_encode所涉及的变量即可:

echo json_encode($theResult);

把你得到的结果复制到http://jsoneditoronline.org/的JSON编辑器中,只需将其复制到左侧窗格中,单击“复制”>,它将以非常好的树状格式美化JSON。每个人都有自己的选择,但希望这个选项能帮助其他人获得更多方便!:)

3
如果文本“全部混在一起”,您可以尝试查看源代码。有时候,转储、消息和异常似乎只是一个长字符串,但实际上是因为换行符未显示,特别是XML树结构。
此外,我曾经为这个目的创建了一个小工具InteractiveVarDump。它肯定有其局限性,但有时也非常方便。即使它是针对PHP 5设计的。

2
获取漂亮的 var_dump 最好最简单的方法是使用 xDebug (任何 PHP 开发者都必须拥有)。
Debian 安装方式:在控制台中输入 apt-get install php-xdebug,然后你应该为它打开 php.ini(取决于你使用哪个堆栈),如 /etc/php/7.0/fpm/php.ini。
搜索 display_errors,将其设置为相同值 -> display_errors = On
在同一文件中稍微向下滑动并检查 html_errors,它也必须为 On
保存并退出。
接着打开 /etc/php/7.0/fpm/conf.d/20-xdebug.ini 并在末尾添加:
``` xdebug.cli_color=1 ```
保存并退出。
还有很多其他可用选项和 xdebug 文档,请参见此处:https://xdebug.org/docs/
祝你好运并玩得开心!!!
结果:Result

1
这里是一个优化 var_dump 的函数。结合 Xdebug 使用,可以更好地查看我们要输出的内容。
我对 Xdebug 的显示进行了一些改进(添加间距、值之间的分隔符、长变量的换行等等)。
当你调用这个函数时,可以设置标题、背景和文本颜色来区分页面中所有的 var_dump。
当然,也可以不设置。
/**
 * Pretty var_dump 
 * Possibility to set a title, a background-color and a text color
 */ 
function dump($data, $title="", $background="#EEEEEE", $color="#000000"){

    //=== Style  
    echo "  
    <style>
        /* Styling pre tag */
        pre {
            padding:10px 20px;
            white-space: pre-wrap;
            white-space: -moz-pre-wrap;
            white-space: -pre-wrap;
            white-space: -o-pre-wrap;
            word-wrap: break-word;
        }

        /* ===========================
        == To use with XDEBUG 
        =========================== */
        /* Source file */
        pre small:nth-child(1) {
            font-weight: bold;
            font-size: 14px;
            color: #CC0000;
        }
        pre small:nth-child(1)::after {
            content: '';
            position: relative;
            width: 100%;
            height: 20px;
            left: 0;
            display: block;
            clear: both;
        }

        /* Separator */
        pre i::after{
            content: '';
            position: relative;
            width: 100%;
            height: 15px;
            left: 0;
            display: block;
            clear: both;
            border-bottom: 1px solid grey;
        }  
    </style>
    ";

    //=== Content            
    echo "<pre style='background:$background; color:$color; padding:10px 20px; border:2px inset $color'>";
    echo    "<h2>$title</h2>";
            var_dump($data); 
    echo "</pre>";

}

1

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