这个递归的函数为什么不能 return?

2017-09-22 07:52:48 +08:00
 MrMike
public function getFolder($dir, $num)
{
$targetDir = rtrim($dir, '/');
if (!is_dir($targetDir))
return false;
$result = false;
$folders = scandir($targetDir);
foreach ( $folders as $folder)
{
if($folder == '.' || $folder == '..' || $folder == '__MACOSX' || $folder == '.DS_Store') {
continue;
}
$subDir = $targetDir . DIRECTORY_SEPARATOR . $folder;
if (!is_dir($subDir))
continue;
if ($folder == $num)
{
$result = $targetDir . DIRECTORY_SEPARATOR . $folder;
return $result;
} else {
return $this->getFolder($subDir, $num);
}
}
}

调试了半天,就是不能 return 到数据,return 为空。
如果 else 不 return,可以 echo 出数据,也不能 return 值。
2840 次点击
所在节点    PHP
5 条回复
juneszh
2017-09-22 08:54:26 +08:00
这代码看得累
yejinmo
2017-09-22 09:15:21 +08:00
public function getFolder($dir, $num)
{
$targetDir = rtrim($dir, '/');
if (!is_dir($targetDir))
return false;
$result = false;
$folders = scandir($targetDir);
foreach ( $folders as $folder)
{
if($folder == '.' || $folder == '..' || $folder == '__MACOSX' || $folder == '.DS_Store')
{
continue;
}
$subDir = $targetDir . DIRECTORY_SEPARATOR . $folder;
if (!is_dir($subDir))
continue;
if ($folder == $num)
{
$result = $targetDir . DIRECTORY_SEPARATOR . $folder;
return $result;
}
else
{
return $this->getFolder($subDir, $num);
}
}
}
yejinmo
2017-09-22 09:15:51 +08:00
@yejinmo
好吧 V2EX 不支持 tab 缩进。。
sortbylist
2017-09-22 09:29:12 +08:00
递归要有收敛,if ($folder == $num) 这个条件能成立么?不能成立就无限递归了。
CEBBCAT
2017-09-22 09:48:18 +08:00
说句无关的:V2EX 贴代码可以用 gist

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX