【问题标题】:php var_dump() vs print_r()php var_dump() 与 print_r()
【发布时间】:2011-03-25 06:51:20
【问题描述】:

var_dump()print_r() 在将数组作为字符串输出方面有什么区别?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    var_dump 函数显示有关变量/表达式的结构化信息,包括其类型。使用缩进显示结构的值递归地探索数组。它还显示了哪些数组值和对象属性是引用。

    print_r() 以人类可读的方式显示有关变量的信息。数组值将以显示 keyselements 的格式呈现。类似的符号用于对象。

    示例:

    $obj = (object) array('qualitypoint', 'technologies', 'India');
    

    var_dump($obj) 将在屏幕输出下方显示。

    object(stdClass)#1 (3) {
     [0]=> string(12) "qualitypoint"
     [1]=> string(12) "technologies"
     [2]=> string(5) "India"
    }
    

    而且,print_r($obj) 将显示在屏幕输出下方。

    stdClass Object ( 
     [0] => qualitypoint
     [1] => technologies
     [2] => India
    )
    

    更多信息

    【讨论】:

    • print_r(null) 将不返回任何内容,因为 var_dump(null) 返回 NULL,这在调试时很有用
    • 你能用'var_export'扩展你的答案吗?
    • var_dump() 的两个优点是转储信息自动包含在 pre 元素中。使用 var_dump() 时,您可以看到每种类型都有自己的颜色。增强可读性。
    • @Julian 仅当安装了 xdebug 时
    【解决方案2】:

    一般来说,print_r( ) 的输出更好、更简洁、更易于阅读,也就是更易于阅读,但无法显示数据类型。

    使用print_r(),您还可以将输出存储到变量中:

    $output = print_r($array, true);
    

    var_dump() 做不到。然而var_dump() 可以显示数据类型。

    【讨论】:

    【解决方案3】:

    var_dump() 会告诉你东西的类型以及里面有什么。

    所以你会得到 => (string)"var" Example 在这里。

    print_r() 只会输出内容。

    会输出 => "var" Example 在这里。

    【讨论】:

    • 我认为更好的例子是var_dump(0.0); 输出float(0) vs print_r(0.0); 输出0(因此可能导致类型混淆)...
    【解决方案4】:

    如果您问什么时候应该使用什么,我通常使用print_r() 来显示值,而var_dump() 则在遇到变量类型问题时使用。

    【讨论】:

      【解决方案5】:

      var_dump 显示有关对象/变量的结构化信息。这包括 type 和值。就像print_r 数组一样,通过递归和缩进。

      print_r 显示有关值的人类可读信息,格式为数组和对象的键和元素。

      需要注意的最重要的事情是var_dump 会输出类型和值,而print_r 不会。

      【讨论】:

        【解决方案6】:

        太简单了。 var_dump() 函数显示有关变量/表达式的结构化信息,包括其类型和值。而 print_r() 以人类可读的方式显示有关变量的信息。

        示例:假设我们有以下数组,我们想要显示它的内容。

        $arr = array ('xyz', false, true, 99, array('50'));
        

        print_r() 函数 - 显示人类可读的输出

        Array
        (
            [0] => xyz
            [1] =>
            [2] => 1
            [3] => 99
            [4] => Array
                (
                    [0] => 50
                )
        )
        

        var_dump() 函数 - 显示值和类型

        array(5) {
          [0]=>
          string(3) "xyz"
          [1]=>
          bool(false)
          [2]=>
          bool(true)
          [3]=>
          int(100)
          [4]=>
          array(1) {
            [0]=>
            string(2) "50"
          }
        }
        

        更多详情:https://stackhowto.com/how-to-display-php-variable-values-with-echo-print_r-and-var_dump/

        【讨论】:

          【解决方案7】:

          var_dumpprint_r 之间的显着差异

          这两个函数转储有关变量的信息,但var_dump 将转储多个参数,其中print_r 可以取两个参数,其中第一个参数是您想要的变量dump 和 second 是一个布尔值。

          var_dump 不能返回任何值,它只能转储/打印值,如果我们将 print_r 的第二个参数设置为 true,print_r 可以返回变量信息。 print_r 的返回值将是 string 格式。

          print_r 打印的信息更具可读性,而var_dump 打印的是原始值。

          print_r 函数可以在许多情况下使用,而var_dump 可以用于调试目的,主要是因为它不能返回值。

          【讨论】:

          • vardump 接受一个或多个个参数,每个参数都会被转储。
          • @bishop ,是的,你是对的,它可以接受更多参数,但它不返回任何值
          • 所以修正你的答案?
          • 已修复@GovindRai
          • “var_dump 不能返回任何值”?是的,它可以。有点。 ob_start(); var_dump($var); $dump=ob_get_clean();
          【解决方案8】:

          我还建议在输出到浏览器时将 var_dump() 或 printr 的输出放入 pre 标记中。

          print "<pre>";
          print_r($dataset);
          print "</pre>";
          

          将给出更易读的结果。

          【讨论】:

            【解决方案9】:

            var_dump($var) 通过提供更多详细信息来显示详细信息

            • 值的数据类型(包括后代元素)
            • 变量中的元素数
            • 值的长度

            【讨论】:

              【解决方案10】:

              对于大型数组,print_r 可以显示比有用的信息更多的信息。您可以像这样截断它,显示前 2000 个字符或您需要的任意多个字符。

                echo "<pre>" . substr(print_r($dataset, 1), 0, 2000) . "</pre>";
              

              【讨论】:

                【解决方案11】:

                var_dump() :-

                1. 此函数显示有关一个或多个表达式的结构化信息,包括其类型和值。使用缩进显示结构的值递归地探索数组和对象。
                2. 此函数显示变量中元素的数量。
                3. 此函数显示变量的长度。
                4. 不能返回值,只能打印值。
                5. 用于调试目的。

                示例:-

                <?php
                $a = array(1, 2, array("a", "b", "c"));
                var_dump($a);
                ?>
                

                输出:-

                   array(3) {
                  [0]=>
                  int(1)
                  [1]=>
                  int(2)
                  [2]=>
                  array(3) {
                    [0]=>
                    string(1) "a"
                    [1]=>
                    string(1) "b"
                    [2]=>
                    string(1) "c"
                  }
                }
                

                print_r() :-

                1. 打印关于变量的人类可读信息。
                2. 不将变量中的元素数显示为 var_dump()。
                3. 不将变量中的变量长度显示为 var_dump()。
                4. 如果我们在 printf_r() 中将第二个参数设置为 true,则返回该值。

                示例:-

                <pre>
                <?php
                $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
                print_r ($a);
                ?>
                </pre>
                

                输出:-

                <pre>
                Array
                (
                    [a] => apple
                    [b] => banana
                    [c] => Array
                        (
                            [0] => x
                            [1] => y
                            [2] => z
                        )
                )
                </pre>
                

                【讨论】:

                • "不能返回值只打印值。"是的,它可以。有点。 ob_start(); var_dump($var); $dump=ob_get_clean();
                【解决方案12】:

                我们可以使用 var_dump 传递多个参数 喜欢:

                var_dump("array1",$array1,"array2",$array2);
                

                【讨论】:

                  【解决方案13】:

                  print_r() 和 var_dump() 是 PHP 中用于调试目的的数组调试函数。 print_r() 函数以 Array([key] = value) 形式返回数组键及其成员,而 var_dump() 函数返回数组列表及其数组键以及数据类型和长度,例如 Array(array_length){[0] = string (1)'a'}。

                  【讨论】:

                  • 它们不是数组调试函数。两者都接受可以是数组但也可以是其他东西(简单类型、对象等)的混合表达式
                  【解决方案14】:

                  所有需要 var_dump() 函数进行测试的人!

                  我已经编写了自己的测试转储函数,因为我不想一遍又一遍地做那个 ob_start ... 东西。好消息是,它甚至可以从源代码中获取参数名称!
                  function test_dump (...$params)
                  {
                      
                      $file_test_dump = 'test_dump.log';
                  
                      $backtrace = debug_backtrace(0, 3);
                  
                      $caller_file        = $backtrace[0]['file']);  
                      $caller_function    = $backtrace[1]['function'];
                      $caller_line        = $backtrace[0]['line'];
                  
                      if (empty($params))
                      {
                          file_put_contents ($file_test_dump, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" , FILE_APPEND);
                          file_put_contents ($file_test_dump, '!!!!!! ' . current_time ("[Y-m-d H:i:s:u]") . " - FILE: {$caller_file} | FUNCTION: {$caller_function} | LINE: {$caller_line} !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \n\n" , FILE_APPEND);
                          file_put_contents ($file_test_dump, "!!! No parameter given !!! \n\n" , FILE_APPEND);
                          return;
                      }
                      
                      
                  
                      // --- get source file ---
                      $source_file = file($backtrace[0]['file']);
                      
                      // --- get line of source file and pre filter with regex ---
                      preg_match ('~\(([^*]*)\)~', $source_file [intval($backtrace[0]['line']) - 1], $parameter_line);
                      $parameter_line_filtered = str_replace(" ", "", $parameter_line [1]);
                  
                      // put parameter names into array
                      $params_names = explode(',', $parameter_line_filtered);
                  
                  
                  
                      // --- OUTPUT   ----
                      
                      file_put_contents ($file_test_dump, "#######################################################################################################################################################################################################################\n" , FILE_APPEND);
                      file_put_contents ($file_test_dump, '### ' . current_time ("[Y-m-d H:i:s:u]") . " - FILE: {$caller_file} | FUNCTION: {$caller_function} | LINE: {$caller_line} ### \n\n" , FILE_APPEND);
                      
                      
                      $i = 0;
                      
                      foreach ($params as $param)
                      {
                  
                          $i++;
                  
                          file_put_contents ($file_test_dump, "   --- Parameter " . $i . ': ' . $params_names[$i - 1] . " --------------------------------------------------------------------------------------------------------------------------\n", FILE_APPEND);
                  
                          if (    is_array($param)    ||
                                  is_object($param) ||
                                  is_bool($param) )
                          {
                              ob_start();
                              var_dump($param);
                              file_put_contents ($file_test_dump, ob_get_contents() . "\n\n", FILE_APPEND);
                              ob_end_clean();
                          }
                          else
                          {
                              file_put_contents ($file_test_dump, $param . "\n\n", FILE_APPEND);
                          }
                  
                  
                      }
                  
                      file_put_contents ($file_test_dump, "\n\n", FILE_APPEND);
                  
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-08-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-20
                    • 2015-03-15
                    • 1970-01-01
                    • 2011-09-11
                    • 2011-06-29
                    相关资源
                    最近更新 更多