Php 递归函数中的变量表现为全局变量
我有一个递归函数,用来打印目录的内容。这是密码Php 递归函数中的变量表现为全局变量,php,global-variables,Php,Global Variables,我有一个递归函数,用来打印目录的内容。这是密码 function dirs($dir, $tab) { $d = opendir($dir); while ( ($name = readdir($d)) !== false ) { if ( $name == "." or $name == ".." ) continue; if ( is_dir($dir . '/' . $name) ) {
function dirs($dir, $tab) {
$d = opendir($dir);
while ( ($name = readdir($d)) !== false ) {
if ( $name == "." or $name == ".." ) continue;
if ( is_dir($dir . '/' . $name) ) {
echo "<b>" . $tab . "[$name]</b><br>";
$tab .= "-";
dirs($dir . '/' . $name, $tab);
}
else {
echo $tab . $name . '<br>';
}
}
closedir($d);
}
dirs("C:/php5", "");
但不是这样
[dev]
-php5ts.lib
[ext]
-php_bz2.dll
-php_curl.dll
-php_enchant.dll
-php_exif.dll
-etc.
[extras]
glib-2.dll
gmodule-2.dll
icudt.dll
icudt46.dll
etc.
问题是为什么“$tab”作为全局变量而不是局部变量
提前感谢。问题在于,您实际上是在重新分配
$tab
的本地副本的值,而实际上您要做的是将$tab.
传递到下一个迭代
因为您已经重新分配了它,所以在内部迭代执行之后,它将在外部迭代中继续具有新值
更改:
$tab .= "-";
dirs($dir . '/' . $name, $tab);
简单地说:
dirs($dir . '/' . $name, $tab . '-');
您将$tab传递给函数,并且没有任何东西可以重新初始化$tab,因此每次它通过时,它都会选择一个新的“-” 每次完成目录内容时,都需要删除“-” 与添加“-”不同,我建议您使用整数跟踪级别,并使用整数添加所需数量的“-”
废话。达维兰多姆的答案要简单得多。$tab=。"-"; 无效语法…抱歉,朋友。我不太明白这个问题?对不起,$tab.=“-”;(已更改)问题是$tab在每次递归中越来越多地使用“-”,就好像它是一个全局变量一样。如果我更改
$tab.=“-”代码>到$tab2=$tab。"-";
并在dirs($dir.'/'.$name,$tab2)中使用$tab2而不是$tab代码>代码工作正常。
dirs($dir . '/' . $name, $tab . '-');