我保证当你必须测试变量时,这是一种非常常见的情况(并且它们很多!),就像这个例子一样(我只是为了减少工作量而将这样的变量命名为vars):
$variable0='red';
$variable1='blue';
$variable2='green';
$variable3='pink';
$variable4='purple';
$variable5='hellow';
$variable6='foo';
$variable7='bar';
$variable8='hi';
$variable9='bye';
echo
'$variable0='.$variable0.'<br>
$variable1='.$variable1.'<br>
$variable2='.$variable2.'<br>
$variable3='.$variable3.'<br>
$variable4='.$variable4.'<br>
$variable5='.$variable5.'<br>
$variable6='.$variable6.'<br>
$variable7='.$variable7.'<br>
$variable8='.$variable8.'<br>
$variable9='.$variable9;
我的问题是:是否有更好的方法使这种回声/转储/打印更容易?
当然,还有其他方法可以完成相同的主席工作:
$x=
'$variable0='."$variable0\n".
'$variable1='."$variable1\n".
'$variable2='."$variable2\n".
'$variable3='."$variable3\n".
'$variable4='."$variable4\n".
'$variable5='."$variable5\n".
'$variable6='."$variable6\n".
'$variable7='."$variable7\n".
'$variable8='."$variable8\n".
'$variable9='."$variable9"
echo nl2br($x);
或者:
$x=<<<HEREDOC
\$variable1=$variable1
\$variable2=$variable2
\$variable3=$variable3
\$variable4=$variable4
\$variable5=$variable5
\$variable6=$variable6
\$variable7=$variable7
\$variable8=$variable8
\$variable9=$variable9;
HEREDOC;
echo nl2br($x);
但也许PHP有一个让这更容易的功能?
顺便说一下,上面所有3个解决方案都是一样的:
$variable1=blue<br>
$variable2=green<br>
$variable3=pink<br>
$variable4=purple<br>
$variable5=hellow<br>
$variable6=foo<br>
$variable7=bar<br>
$variable8=hi<br>
$variable9=bye;
答案 0 :(得分:5)
介绍compact
:
var_dump(compact('foo', 'bar', 'baz'));
请注意,我明确使用了三个非常不同的变量:$foo
,$bar
和$baz
。
如果你实际上确实有$foo1
,$foo2
等,那么你真的真的想要使用数组。倾销也是微不足道的:
$foo = array();
$foo[0] = 'bar';
$foo[1] = 'baz';
var_dump($foo);
一般情况下,如果你有太多的变量,你的范围可能太大,你应该将所有内容重构为一些较小的函数,或者你的算法比它需要的更复杂是,或者您应该使用数组或其他数据结构。
答案 1 :(得分:4)
get_defined_vars()
可以这样做。可能会过度(所有可访问的变量将被显示):
print_r( get_defined_vars() );
返回值:包含所有已定义变量*的多维数组 *在一个函数中,它只显示本地$ vars,以及那些定义为全局的。
注意:这正是您正在寻找的内容,但其他答案中提到的数组方法在逻辑上更合适,请参阅下文:
设置值的更好方法是使用数组,这样您就可以将数组设置为&#39;多个值一起:
$color[] = 'red'; // will automatically start with key=0
$color[] = 'blue'; // key=1
$color[] = 'green';// key=2 etc
print_r( $color );
echo $color[1]; // Blue, same as your echo $variable1;
答案 2 :(得分:2)
您可以将变量声明为数组中的键,而不是
$myarray=Array();
$myarray['variable0']='red';
$myarray['variable1']='blue';
$myarray['variable2']='green';
$myarray['variable3']='pink';
$myarray['variable4']='purple';
$myarray['variable5']='hellow';
$myarray['variable6']='foo';
$myarray['variable7']='bar';
$myarray['variable8']='hi';
$myarray['variable9']='bye';
并使用
打印所有内容echo '<pre>';
print_r($myarray);
echo '</pre>';
然后,如果您仍然需要将它们用作单独的变量,请执行
extract($myarray)
将在全局上下文中创建$ variable0到$ variable9。
答案 3 :(得分:1)
如果您知道上限和下限,并且所有变量都具有相似的名称,您可以执行以下操作:
for ($i = 0; $i < $end; ++$i) { echo ${'value_name'. $i}; }
答案 4 :(得分:0)
尝试重构您的代码并使用arrays
然后你可以做print_r或var_dump
答案 5 :(得分:0)
这应该为您提供所需的输出:
function get_var_name($var) {
foreach($GLOBALS as $var_name => $value) {
if ($value === $var) {
return $var_name;
}
}
return "Variable name not found";
}
function miracle_var_dump($valuesToDump) {
//For each variable in the $valuesToDump array, print the name and value
for($i = 0; $i < count($valuesToDump); $i++) {
echo(get_var_name($valuesToDump[i]) . "=" . $valuesToDump[i] . "<br/>");
}
}
//Making a call to dump the variables
miracle_var_dump(array($variable0,$variable1,$variable2,$variable3,$variable4,$variable5,$variable6,$variable7,$variable8,$variable9))
函数get_var_name获取给定变量的变量名称(取自one of Jeremey Rutins awsners)。
答案 6 :(得分:0)
//let your variables like this
$variable0='red';
$variable1='blue';
$variable2='green';
//an array to keep all the variable names
$var_names=array();
$var_names[]='$variable0';
$var_names[]='$variable1';
$var_names[]='$variable2';
//etc...
print_var_name($var_names);
function print_var_name($var_names) {
//loop through the array and dump them if they are in $GLOBALS
foreach($GLOBALS as $var_name => $value) {
if (in_array('$'.$var_name,$var_names)) {
echo $var_name;
var_dump($value);
}
}