使用PHP调试数组的最佳方法

使用PHP调试数组的最佳方法,php,arrays,debugging,Php,Arrays,Debugging,调试数组的最佳方法是什么,这样您就可以看到存储了哪些值以及这些值存储在数组中的哪些键中?另外,您如何使其更易于直观查看,从而不必在一行print\r()函数中一直查看数组中的键及其值 编辑: 我现在意识到,print\u r()并不是调试阵列的唯一解决方案。因此,如果您有其他解决方案,也可以了解更多有关调试的信息 EDIT2: ,并且已经提到了这两个方面,如果您有其他人可以随意发布。也谢谢你写的Kint 快速解决方案:打开页面的源代码,您将看到print\r的输出分成几行并完全缩进。print\

调试数组的最佳方法是什么,这样您就可以看到存储了哪些值以及这些值存储在数组中的哪些键中?另外,您如何使其更易于直观查看,从而不必在一行
print\r()
函数中一直查看数组中的键及其值

编辑:

我现在意识到,
print\u r()
并不是调试阵列的唯一解决方案。因此,如果您有其他解决方案,也可以了解更多有关调试的信息

EDIT2:


,并且已经提到了这两个方面,如果您有其他人可以随意发布。也谢谢你写的Kint

快速解决方案:打开页面的源代码,您将看到
print\r
的输出分成几行并完全缩进。

print\r不是一行(它使用
\n
作为新行,而不是

)。在其周围添加一个
以显示多行。

print\r()
使用
\n
作为其行分隔符。使用
标记或查看页面的源代码以使其看起来正确。(在Windows上,Linux与
\n
配合使用)

您可以查看源代码,也可以使用
var\u dump()
print\u r()
配合使用……

每个PHP开发人员都应该具有此功能。我的职能如下:

function d($var){
    echo '<pre>';
    var_dump($var);
    echo '</pre>';
}
array(
     key1 => value,
     key2 => value,
     ...
     )
<?php
 krumo($my_array);
?>
'; }
直观查看数组中的值/键的最佳做法如下:


echo”我使用var\u dump…如果您还需要更多,请访问以下网站:


每个人都建议使用
print\r
,这是一种核心技术,效果非常好。 但是,在查看大型阵列时,
print\u r()
会让我对缩小输出范围感到恼火

试试看。 它很好地打印了具有可视格式的数组,单击展开,还提供了精确的数组键调用,您可以简单地复制和粘贴


被认为是Krumo更好的替代品。(谢谢ITroubs!)

这是我的

演示:
回购:
作曲家:

如果需要,您可以通过css重新设置样式


就我个人而言,我从不喜欢这些花哨的东西,我使用
print\r()
,因为它不会让人不知所措,而且能提供足够的信息

这是我的:

';" 插入中断 “死

您只需选择
$变量
并使用宏。

老实说,我很惊讶
print_r()
()。在将数据打印到文档中时,有三种本机函数,它们各有优缺点。如本页其他地方所述,将输出包装在
标记在尊重换行符和制表符方面非常有用

事实上,所有php开发人员,从新手到业余爱好者,再到专业人士,再到大向导级别999,都需要在他们的工具箱中包含以下技术

这是

  • 是我最常用的格式。此函数将字符串用单引号括起来。这对于识别尾随空白字符和区分数字类型与字符串类型非常重要。为了保持输出数据的完整性并允许数据立即可移植到可运行上下文中,单引号和反斜杠被转义——不要让这绊倒您

  • 当需要检查数据时,它可能是我使用最少、信息量最少的函数。它不会在任何类型的定界字符中包装字符串,因此您将无法看到不可见的字符。它不会转义反斜杠、单引号或双引号。它将关键帧包装在方括号中,如果关键帧最初包含方括号,则可能会导致混淆

  • 它的独特功能在于它表示数据类型和字符串的字节数。当您可能有意外的多字节字符干扰脚本的成功/稳定性时,这是最好的工具

  • 根据您的php版本和使用的函数,您可能会在相同的输入数据中看到不同的值。注意浮点值

    非常类似于
    var_dump()
    的输出,但也包括
    refcount
    。此本机函数不太可能提供与“调试阵列”相关的任何其他好处

    还有一些非本机工具可能会引起人们的兴趣(其中大部分我从未使用过)。如果您使用的是框架,例如Laravel,它提供了
    dd()
    ()作为诊断辅助方法。一些开发人员喜欢这个工具的可折叠/可扩展样式,但其他开发人员则大声表示他们的烦恼,因为要公开嵌套级别的数据,必须进行繁琐的单击


    作为打印可编辑数据的一种横向方法,您可以考虑使用。这可能会揭示一些可能导致麻烦的事情,如多字节和空白字符,但不要忘记,这实际上是“编码”数据。换句话说,它正在将数据从一种形式转换为另一种形式,并将在过程中改变某些情况。与
    var_export()
    类似,json编码的字符串是在需要从一个地方传输到另一个地方(如从项目到堆栈溢出问题!)时保持数据完整性的一种极好形式。

    或。但这有时会使你的页脚、页眉等都已经有了的页面变得非常大@bwoebi更不用说你必须重新提交POST请求。如果你在html页面上“查看源代码”,你会看到换行符出现。我建议不要使用(和推广)有缺陷和过时的Krumo。它已经5年多没有更新了,不显示私人成员,在某些情况下甚至更改显示的数据(!),而且到处都是bug。免责声明:我是Ki的作者
    <?php
     krumo($my_array);
    ?>
    
    if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == 'Debug')
    {
        echo '<strong><i>FILE : </i></strong>'.__FILE__.'<strong> <i>LINE : </i></strong>'.__LINE__.'<pre>';
        print_r($var);
        echo '</pre>';
        die;
    }
    
    cut-to-clipboard
    "if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == 'Debug')"
    insert-break
    "{"
    insert-break
    "echo '<strong><i>FILE : </i></strong>'.__FILE__.'<strong> <i>LINE :</i></strong>'.__LINE__.'<pre>';"
    insert-break
    "print_r("
    paste-from-clipboard
    remove-line-begin 
    ");"
    insert-break
    "echo '</pre>';"
    insert-break
    "die;"