【问题标题】:Make var_dump look pretty让 var_dump 看起来很漂亮
【发布时间】:2013-11-17 22:44:02
【问题描述】:

我有一个简单的$_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 关于在发布后处理字符串的建议持开放态度。

【问题讨论】:

标签: php arrays var-dump


【解决方案1】:

我真的很喜欢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(),您只需添加&lt;pre&gt; 标签:

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

【讨论】:

  • 请注意,echovar_exporthighlight_string 都是 php 函数,需要在 &lt;?php ?&gt; 块内。是的,即使 highlight_string 函数行内部有一个 对,外部也需要一对。
  • 这个 var_dump 的较短变体:var_dump(highlight_string("&lt;?\n". var_export($data, true)));
  • 不错!这非常有帮助:) 谢谢!
  • 该死! 15 年我一直在使用 PHP,我现在才看到这个??? :D
  • 这个答案的获胜者具体是highlight_string("&lt;?php\n\$data =\n" . var_export($data, true) . ";\n?&gt;");!!!
【解决方案2】:

这是一个替代的、积极维护的开源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

截图如下:

【讨论】:

    【解决方案3】:

    这是我为以一种很好的方式显示数组而制作的函数:

    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>
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 不确定你要我做什么,因为代码是自我解释的,如果你只是复制粘贴到一个 php 文件中也可以工作。然而,这是我第一次在 stackoverflow 上发帖,如果我遗漏了任何明显的内容,请见谅。
    【解决方案4】:

    使用预格式化的 HTML 元素

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

    【讨论】:

      【解决方案5】:

      我似乎没有足够的代表来关闭它作为重复,但如果其他人可以做到这一点,它就是一个。我在A more pretty/informative Var_dump alternative in PHP? 上发布了同样的内容,但为了节省时间,我也会在这里复制/粘贴:

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

      首先对有问题的变量进行 json_encode:

      echo json_encode($theResult);
      

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

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

      【讨论】:

        【解决方案6】:
        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();
        }
        

        【讨论】:

          【解决方案7】:

          【讨论】:

            【解决方案8】:

            如果它是“全部混合在一起”,您通常可以尝试“查看源代码”。有时,转储、消息和异常似乎只是一个长字符串,而事实证明根本不显示换行符。尤其是 XML 树。

            另外,我曾经为此创建了一个名为InteractiveVarDump 的小工具。它当然有其局限性,但有时也非常方便。尽管它的设计考虑了 PHP 5。

            【讨论】:

              【解决方案9】:

              我写了一个函数 (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);
              }
              

              【讨论】:

                【解决方案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开始和结束标签

                【讨论】:

                  【解决方案11】:

                  这是我拥有漂亮 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>";
                  
                  }
                  

                  【讨论】:

                    【解决方案12】:

                    你可以用这个debugVar()代替var_dump()

                    查看:https://github.com/E1NSER/php-debug-function

                    【讨论】:

                      【解决方案13】:

                      获得漂亮的 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

                      【讨论】:

                        【解决方案14】:

                        试试xdebug php 扩展。

                        例子:

                        <?php var_dump($_SERVER); ?>
                        

                        输出:

                        【讨论】:

                        • 请注意,xdebug 所做的不仅仅是漂亮的 var_dump :)
                        • 我曾经在做 var_dump 时看到过这样的情况,但现在我有 wampserver 2.5 和 php 5.5.12 我看到它没有格式化。我以前怎么能看到像你的照片,除了 wampserver 之外没有安装任何东西?
                        • 这绝对是非常性感的。不知道为什么这没有被标记为正确的解决方案,但您可以提供有关安装过程的更多详细信息。在 Windows 上,它只是 extension=php_xdebug.dll,而不是 zend_extension=/some/really/long/specific/path/xdebug.so
                        【解决方案15】:

                        使用

                        echo nl2br(var_dump());
                        

                        这应该工作^^

                        【讨论】:

                        • var_dump 不返回任何内容,直接输出。
                        猜你喜欢
                        • 2020-06-20
                        • 1970-01-01
                        • 2015-11-16
                        • 1970-01-01
                        • 2019-02-14
                        • 1970-01-01
                        • 2023-03-23
                        • 1970-01-01
                        相关资源
                        最近更新 更多