使 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个回答

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

0
这是一个我为了以美观的方式展示数组而编写的函数:
function nicevar($var,$title=''){
    if(is_array($var)){
        $table = '<table>';
        if($title){
            $table .= '<tr><th colspan="20">'.$title.'</th></tr>';
        }
        foreach($var as $k => $v){
            $table .= '<tr>';
                $table .= '<td><b>'.$k.'</b></td>';
                $table .= '<td>';
                    if(is_array($v)){
                        $table .= nicevar($v);
                    }else{
                        $table .=  $v;
                    }
                $table .= '</td>';
            $table .= '</tr>';
        }
        $table .= '</table>';
    }else{
        $table = $var;
    }
    return $table;  
}

用法:

echo nicevar($_SESSION['debug'],'Structure of debug');

使用这个样式让它看起来漂亮:

<style>
body {
        padding: 30px;
}

table {
    margin: 5px;
}
table, th, td {
  border: 1px solid black;
  border-collapse: collapse;
}
th {
    background-color: #9fff96;
}
th, td {
  padding: 2px;
  border-spacing: 2px;
}
</style>

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
我不确定你要我做什么,因为代码本身已经很清晰,并且如果你只是将其复制粘贴到 PHP 文件中,它也可以正常工作。然而,这是我在 stackoverflow 上的第一篇帖子,所以如果我漏掉了任何明显的东西,请原谅。 - Max Lumnar

0

-1

在CI4中,使输出更漂亮变得更简单了:

dd($this->request);

这里是结果


1
OP并没有说他们正在使用Code Igniter。我猜这就是你所谈论的。如果是这样,请扩展你的答案,这样观众就不必假设你在谈论什么了。给出一个示例输出。 - Rohit Gupta

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

这应该可以工作 ^^


10
var_dump 函数不会返回任何内容,它直接输出。 - AbraCadaver

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