我如何显示多维数组(2D、3D、4D 等),例如 var_dump,在 PHP 中循环和回显?
How Can I show Multidimensional Arrays (2D,3D,4D and more) like var_dump with loops and echo in PHP?
这是我的数组:
$arr=array(
array(
array(array( "value1", "value2" ), "value2" ),
array( "value3", "value4" )
),
array(
array( "value5", "value6" ),
array( "value7", "value8" )
)
);
如果我们用 var_dump 打印它,它显示如下:
array(2) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(6) "value1"
[1]=>
string(6) "value2"
}
[1]=>
string(6) "value2"
}
[1]=>
array(2) {
[0]=>
string(6) "value3"
[1]=>
string(6) "value4"
}
}
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(6) "value5"
[1]=>
string(6) "value6"
}
[1]=>
array(2) {
[0]=>
string(6) "value7"
[1]=>
string(6) "value8"
}
}
}
我想写一个函数,它可以打印 每个多维数组 只有回声和循环,我该怎么做?
这是我的代码:
function recursive($array)
{
foreach ($array as $key => $value) {
//If $value is an array.
if (is_array($value)) {
//We need to loop through it.
recursive($value);
} else {
if (gettype($value)!=="string") {
//It is not an array, so print it out.
echo $key . ": " .gettype($value).count($value). $value, '<br>';
} else {
echo "[".$key . "]=>" .gettype($value)."(".strlen($value).") \"". $value."\"", '<br>';
}
}
}
}
recursive($arr);
这是输出:
[0]=>string(6) "value1"
[1]=>string(6) "value2"
[1]=>string(6) "value2"
[0]=>string(6) "value3"
[1]=>string(6) "value4"
[0]=>string(6) "value5"
[1]=>string(6) "value6"
[0]=>string(6) "value7"
[1]=>string(6) "value8"
此代码无法像 var_dump 那样打印!
我想通过我的功能像 var_dump 一样打印,我该怎么做?
function var_debug($variable,$strlen=100,$width=25,$depth=10,$i=0,&$objects = array())
{
$search = array("[=10=]", "\a", "\b", "\f", "\n", "\r", "\t", "\v");
$replace = array('[=10=]', '\a', '\b', '\f', '\n', '\r', '\t', '\v');
$string = '';
switch(gettype($variable)) {
case 'boolean': $string.= $variable?'true':'false'; break;
case 'integer': $string.= $variable; break;
case 'double': $string.= $variable; break;
case 'resource': $string.= '[resource]'; break;
case 'NULL': $string.= "null"; break;
case 'unknown type': $string.= '???'; break;
case 'string':
$len = strlen($variable);
$variable = str_replace($search,$replace,substr($variable,0,$strlen),$count);
$variable = substr($variable,0,$strlen);
if ($len<$strlen) $string.= '"'.$variable.'"';
else $string.= 'string('.$len.'): "'.$variable.'"...';
break;
case 'array':
$len = count($variable);
if ($i==$depth) $string.= 'array('.$len.') {...}';
elseif(!$len) $string.= 'array(0) {}';
else {
$keys = array_keys($variable);
$spaces = str_repeat(' ',$i*2);
$string.= "array($len)\n".$spaces.'{';
$count=0;
foreach($keys as $key) {
if ($count==$width) {
$string.= "\n".$spaces." ...";
break;
}
$string.= "\n".$spaces." [$key] => ";
$string.= var_debug($variable[$key],$strlen,$width,$depth,$i+1,$objects);
$count++;
}
$string.="\n".$spaces.'}';
}
break;
case 'object':
$id = array_search($variable,$objects,true);
if ($id!==false)
$string.=get_class($variable).'#'.($id+1).' {...}';
else if($i==$depth)
$string.=get_class($variable).' {...}';
else {
$id = array_push($objects,$variable);
$array = (array)$variable;
$spaces = str_repeat(' ',$i*2);
$string.= get_class($variable)."#$id\n".$spaces.'{';
$properties = array_keys($array);
foreach($properties as $property) {
$name = str_replace("[=10=]",':',trim($property));
$string.= "\n".$spaces." [$name] => ";
$string.= var_debug($array[$property],$strlen,$width,$depth,$i+1,$objects);
}
$string.= "\n".$spaces.'}';
}
break;
}
if ($i>0) return $string;
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
do $caller = array_shift($backtrace); while ($caller && !isset($caller['file']));
if ($caller) $string = $caller['file'].':'.$caller['line']."\n".$string;
echo $string;
}
信用:https://www.leaseweb.com/labs/2013/10/smart-alternative-phps-var_dump-function/
这是我的数组:
$arr=array(
array(
array(array( "value1", "value2" ), "value2" ),
array( "value3", "value4" )
),
array(
array( "value5", "value6" ),
array( "value7", "value8" )
)
);
如果我们用 var_dump 打印它,它显示如下:
array(2) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(6) "value1"
[1]=>
string(6) "value2"
}
[1]=>
string(6) "value2"
}
[1]=>
array(2) {
[0]=>
string(6) "value3"
[1]=>
string(6) "value4"
}
}
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
string(6) "value5"
[1]=>
string(6) "value6"
}
[1]=>
array(2) {
[0]=>
string(6) "value7"
[1]=>
string(6) "value8"
}
}
}
我想写一个函数,它可以打印 每个多维数组 只有回声和循环,我该怎么做?
这是我的代码:
function recursive($array)
{
foreach ($array as $key => $value) {
//If $value is an array.
if (is_array($value)) {
//We need to loop through it.
recursive($value);
} else {
if (gettype($value)!=="string") {
//It is not an array, so print it out.
echo $key . ": " .gettype($value).count($value). $value, '<br>';
} else {
echo "[".$key . "]=>" .gettype($value)."(".strlen($value).") \"". $value."\"", '<br>';
}
}
}
}
recursive($arr);
这是输出:
[0]=>string(6) "value1"
[1]=>string(6) "value2"
[1]=>string(6) "value2"
[0]=>string(6) "value3"
[1]=>string(6) "value4"
[0]=>string(6) "value5"
[1]=>string(6) "value6"
[0]=>string(6) "value7"
[1]=>string(6) "value8"
此代码无法像 var_dump 那样打印!
我想通过我的功能像 var_dump 一样打印,我该怎么做?
function var_debug($variable,$strlen=100,$width=25,$depth=10,$i=0,&$objects = array())
{
$search = array("[=10=]", "\a", "\b", "\f", "\n", "\r", "\t", "\v");
$replace = array('[=10=]', '\a', '\b', '\f', '\n', '\r', '\t', '\v');
$string = '';
switch(gettype($variable)) {
case 'boolean': $string.= $variable?'true':'false'; break;
case 'integer': $string.= $variable; break;
case 'double': $string.= $variable; break;
case 'resource': $string.= '[resource]'; break;
case 'NULL': $string.= "null"; break;
case 'unknown type': $string.= '???'; break;
case 'string':
$len = strlen($variable);
$variable = str_replace($search,$replace,substr($variable,0,$strlen),$count);
$variable = substr($variable,0,$strlen);
if ($len<$strlen) $string.= '"'.$variable.'"';
else $string.= 'string('.$len.'): "'.$variable.'"...';
break;
case 'array':
$len = count($variable);
if ($i==$depth) $string.= 'array('.$len.') {...}';
elseif(!$len) $string.= 'array(0) {}';
else {
$keys = array_keys($variable);
$spaces = str_repeat(' ',$i*2);
$string.= "array($len)\n".$spaces.'{';
$count=0;
foreach($keys as $key) {
if ($count==$width) {
$string.= "\n".$spaces." ...";
break;
}
$string.= "\n".$spaces." [$key] => ";
$string.= var_debug($variable[$key],$strlen,$width,$depth,$i+1,$objects);
$count++;
}
$string.="\n".$spaces.'}';
}
break;
case 'object':
$id = array_search($variable,$objects,true);
if ($id!==false)
$string.=get_class($variable).'#'.($id+1).' {...}';
else if($i==$depth)
$string.=get_class($variable).' {...}';
else {
$id = array_push($objects,$variable);
$array = (array)$variable;
$spaces = str_repeat(' ',$i*2);
$string.= get_class($variable)."#$id\n".$spaces.'{';
$properties = array_keys($array);
foreach($properties as $property) {
$name = str_replace("[=10=]",':',trim($property));
$string.= "\n".$spaces." [$name] => ";
$string.= var_debug($array[$property],$strlen,$width,$depth,$i+1,$objects);
}
$string.= "\n".$spaces.'}';
}
break;
}
if ($i>0) return $string;
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
do $caller = array_shift($backtrace); while ($caller && !isset($caller['file']));
if ($caller) $string = $caller['file'].':'.$caller['line']."\n".$string;
echo $string;
}
信用:https://www.leaseweb.com/labs/2013/10/smart-alternative-phps-var_dump-function/