2015-11-03 2 views
1

Я пытаюсь использовать условие php внутри цикла foreach, но у меня возникают некоторые трудности. Я просмотрел другие темы, связанные с этим, но не смог найти решение/объяснение для применения в моем коде. Вот оно:Если условие внутри цикла 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 />"; условием, так что вместо того, чтобы быть echo'd переменная $ папка будет сравниваться с другой переменной, прежде чем вернуться в петлю, как это :

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 с $ directory только с условием If? – apatik

+0

Это связано с тем, что называется [scope] (https://en.wikipedia.org/wiki/Scope_ (computer_science)) ([Область переменной PHP] (http://php.net/manual/en/language. variables.scope.php)). Если определена ваша переменная '$ directory', это не та область, где у вас есть это условие if. Вы делаете эту переменную часть этой области, передавая ее как параметр. – bmla

+0

aaah Я понял! Я считаю, что это та же самая причина, по которой я не мог печатать/эхо-массив, определенный внутри 'function scanDirectory' вне этой функции? Еще раз спасибо за вашу помощь – apatik