使var_dump看起来很漂亮


131

我有一个简单的$_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建议。


47
是的 echo '<pre>'; var_dump($data); echo '</pre>'
阿马尔·穆拉利

9
这是什么魔术?
Plummer 2013年


最初提出问题时,我认为这不在网上商店中。值得一看的人。
Plummer

1
我想你只是想要print_r($data)php.net/manual/en/function.print-r.php
德鲁·贝克

Answers:


367

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

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

甚至是这样的颜色语法高亮显示:

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

您可以使用进行相同的操作print_r()。因为var_dump()您只需要添加<pre>标签:

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

7
需要注意的是echovar_exporthighlight_string都是PHP函数,需要一个内部<?php ?>块。是的,即使highlight_string函数行内部有一个<?php?>对,在外部也需要一对。
BeowulfNode42

此var_dump的较短变体:var_dump(highlight_string("<?\n". var_export($data, true)));
jhpg,

40

尝试为PHP扩展xdebug

例:

<?php var_dump($_SERVER); ?>

输出:

在此处输入图片说明


7
请注意,xdebug所做的不仅仅是分配var_dump :)
Latheesan 2013年

在执行var_dump时,我曾经看到过这样的内容,但是现在有了wampserver 2.5和php 5.5.12,我发现它没有格式。在没有安装wampserver的情况下,我怎么能像以前一样看到您的照片?
利蒙2014年

1
这绝对是非常性感的。不知道为什么未将此标记为正确的解决方案,但是您可以提供有关安装过程的更多详细信息。在Windows中,这只是extension=php_xdebug.dll,不zend_extension=/some/really/long/specific/path/xdebug.so
Kraang总理


10

我对@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();
}

之前的结果:

在此处输入图片说明

结果之后:

在此处输入图片说明

现在我们没有php开始和结束标签


3

如果“一起被弄脏”,您通常可以尝试ol的“查看源代码”。有时候,转储,消息和异常似乎只是一长串,而事实证明换行符根本就不显示。特别是XML树。

或者,我曾经为此目的创建了一个名为InteractiveVarDump的小工具。它当然有其局限性,但有时也很方便。即使在设计时就考虑到PHP 5。


1

最好的和最简单的获得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/

祝好运并玩得开心点 !!!

结果



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
function var_view($var)
{

    ini_set("highlight.keyword", "#a50000;  font-weight: bolder");
    ini_set("highlight.string", "#5825b6; font-weight: lighter; ");

    ob_start();
    highlight_string("<?php\n" . var_export($var, true) . "?>");
    $highlighted_output = ob_get_clean();

    $highlighted_output = str_replace( ["&lt;?php","?&gt;"] , '', $highlighted_output );

    echo $highlighted_output;
    die();
}

1

我似乎没有足够的代表将其作为副本关闭,但是如果别人可以做到这一点,那将是一个代表。我在PHP的更漂亮/信息量更大的Var_dump替代方法中发布了相同的内容但是为了节省时间,我也会在此处复制/粘贴它:

我不得不在这里添加另一个答案,因为我真的不想遍历其他解决方案中的步骤。它非常简单,不需要扩展,包含等,这是我的首选。这非常容易而且非常快速。

首先只需对问题变量json_encode:

echo json_encode($theResult);

将获得的结果复制到位于http://jsoneditoronline.org/的JSON编辑器中,只需将其复制到左侧窗格中,单击Copy>,它会以一种非常漂亮的树格式打印JSON。

对于每个人自己,但是希望这可以帮助其他人有一个更好的选择!:)



-2

我写了一个函数(debug_display),它可以以漂亮的方式打印,数组,对象和文件信息。

<?php
function debug_display($var,$show = false) {
    if($show) { $dis = 'block'; }else { $dis = 'none'; }
    ob_start();
    echo '<div style="display:'.$dis.';text-align:left; direction:ltr;"><b>Idea Debug Method : </b>
        <pre>';
    if(is_bool($var)) {
        echo $var === TRUE ? 'Boolean(TRUE)' : 'Boolean(FALSE)';
    }else {
        if(FALSE == empty($var) && $var !== NULL && $var != '0') {
            if(is_array($var)) {
                echo "Number of Indexes: " . count($var) . "\n";
                print_r($var);
            } elseif(is_object($var)) {
                print_r($var);
            } elseif(@is_file($var)){
                $stat = stat($var);
                $perm = substr(sprintf('%o',$stat['mode']), -4);
                $accesstime = gmdate('Y/m/d H:i:s', $stat['atime']);
                $modification = gmdate('Y/m/d H:i:s', $stat['mtime']);
                $change = gmdate('Y/m/d H:i:s', $stat['ctime']);
                echo "
    file path : $var
    file size : {$stat['size']} Byte
    device number : {$stat['dev']}
    permission : {$perm}
    last access time was : {$accesstime}
    last modified time was : {$modification}
    last change time was : {$change}
    ";
            }elseif(is_string($var)) {
                print_r(htmlentities(str_replace("\t", '  ', $var)));
            }  else {
                print_r($var);
            }
        }else {
            echo 'Undefined';
        }
    }
    echo '</pre>
    </div>';
    $output = ob_get_contents();
    ob_end_clean();
    echo $output;
    unset($output);
}

-12

echo nl2br(var_dump());

这应该工作^^


9
var_dump不返回任何内容,而是直接输出。
2015年
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.