2015-11-03 30 views
1

我试图在foreach循环中使用php条件,但我遇到了一些困难。我抬头看着其他线程处理,但找不到解决方案/解释适用于我的代码。那就是:如果foreach循环内的条件(scanDirectory函数)

<?php 
    $directory = $_SESSION['cwd'];    // current directory 
    $user = $_SESSION['simple_auth']['username']; // get username 
    $repository = gatorconf::get('repository'); // get base repertory of the file manager 
    $userdir = $repository.DS.'user'.DS.$user; // user's repertory 

function scanDirectory($userdir = ''){ 
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR); 
    foreach($folders as $folder){ 
     echo "$folder<br />";  // line where i tried different things for my condition 
     scanDirectory($folder); 
    } 
} 
scanDirectory($userdir); 
?> 

我想这样取而代之的是被回显变量$文件夹会比另一个变量的条件来代替行echo "$folder<br />";才回到进入死循环,这样:

if ($folder == $directory) { 
    echo "you have permissions on this folder"; 
} 

基本上我的代码的目的是为了特定的剧目与保留剧目的用户目前在比较,如果有一个匹配,那么一些HTML将被显示,但我想我没有正确的做法。

任何建议表示赞赏!

感谢您的帮助

回答

1

给当前目录作为参数传递给函数并把它作为你通过所有文件夹。

<?php 
$directory = $_SESSION['cwd'];    // current directory 
$user = $_SESSION['simple_auth']['username']; // get username 
$repository = gatorconf::get('repository'); // get base repertory of the file manager 
$userdir = $repository.DS.'user'.DS.$user; // user's repertory 

function scanDirectory($userdir = '', $directory){ 
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR); 
    foreach($folders as $folder){ 
     if ($folder == $directory) { 
      echo "you have permissions on this folder"; 
     } 
     scanDirectory($folder, $directory); 
    } 
} 

scanDirectory($userdir, $directory); 
?> 
+0

非常感谢,有效!请介意解释添加参数时实际发生的情况?为什么函数只是简单地将$ folder与$目录进行比较,只有If条件? – apatik

+0

它与[范围](https://en.wikipedia.org/wiki/Scope_(computer_science))([PHP变量范围](http://php.net/manual/en/language))有关。 variables.scope.php))。你的'$ directory'变量被定义的范围与你有条件的地方不一样。通过将其作为参数传递,可以使该范围的变量部分成为可能。 – bmla

+0

aaah我明白了!我相信这是完全相同的原因,我不能打印/ echo这个函数以外的'function scanDirectory'内定义的数组?再次感谢您的帮助 – apatik