【发布时间】:2011-03-25 06:51:20
【问题描述】:
var_dump() 和print_r() 在将数组作为字符串输出方面有什么区别?
【问题讨论】:
var_dump() 和print_r() 在将数组作为字符串输出方面有什么区别?
【问题讨论】:
var_dump 函数显示有关变量/表达式的结构化信息,包括其类型和值。使用缩进显示结构的值递归地探索数组。它还显示了哪些数组值和对象属性是引用。
print_r() 以人类可读的方式显示有关变量的信息。数组值将以显示 keys 和 elements 的格式呈现。类似的符号用于对象。
示例:
$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( ) 的输出更好、更简洁、更易于阅读,也就是更易于阅读,但无法显示数据类型。
使用print_r(),您还可以将输出存储到变量中:
$output = print_r($array, true);
var_dump() 做不到。然而var_dump() 可以显示数据类型。
【讨论】:
如果您问什么时候应该使用什么,我通常使用print_r() 来显示值,而var_dump() 则在遇到变量类型问题时使用。
【讨论】:
var_dump 显示有关对象/变量的结构化信息。这包括 type 和值。就像print_r 数组一样,通过递归和缩进。
print_r 显示有关值的人类可读信息,格式为数组和对象的键和元素。
需要注意的最重要的事情是var_dump 会输出类型和值,而print_r 不会。
【讨论】:
太简单了。 var_dump() 函数显示有关变量/表达式的结构化信息,包括其类型和值。而 print_r() 以人类可读的方式显示有关变量的信息。
示例:假设我们有以下数组,我们想要显示它的内容。
$arr = array ('xyz', false, true, 99, array('50'));
Array
(
[0] => xyz
[1] =>
[2] => 1
[3] => 99
[4] => Array
(
[0] => 50
)
)
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/
【讨论】:
var_dump 和 print_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 接受一个或多个个参数,每个参数都会被转储。
ob_start(); var_dump($var); $dump=ob_get_clean();
我还建议在输出到浏览器时将 var_dump() 或 printr 的输出放入 pre 标记中。
print "<pre>";
print_r($dataset);
print "</pre>";
将给出更易读的结果。
【讨论】:
var_dump($var) 通过提供更多详细信息来显示详细信息
【讨论】:
对于大型数组,print_r 可以显示比有用的信息更多的信息。您可以像这样截断它,显示前 2000 个字符或您需要的任意多个字符。
echo "<pre>" . substr(print_r($dataset, 1), 0, 2000) . "</pre>";
【讨论】:
var_dump() :-
示例:-
<?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() :-
示例:-
<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();
我们可以使用 var_dump 传递多个参数 喜欢:
var_dump("array1",$array1,"array2",$array2);
【讨论】:
print_r() 和 var_dump() 是 PHP 中用于调试目的的数组调试函数。 print_r() 函数以 Array([key] = value) 形式返回数组键及其成员,而 var_dump() 函数返回数组列表及其数组键以及数据类型和长度,例如 Array(array_length){[0] = string (1)'a'}。
【讨论】:
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);
}
【讨论】: