Применение глобального массива в рекурсивной функции.

beba

Новичок
Применение глобального массива в рекурсивной функции.

У меня есть рекурсивная функция, результатом выполнения которой я хочу возвратить массив из путей к файлам.
Вот она.
PHP:
function tep_tree_in_array($dir) {
  $array_dir=tep_get_files_from_dir($dir);
  foreach ($array_dir as $keydir=>$valuedir) {
    if (is_dir($dir.$valuedir)) {
      echo $dir.$valuedir.'<br>';
      tep_tree_in_array($dir.$valuedir.'/');
    } else {
      echo 'File:'.$dir.$valuedir.'<br>';
    };
  }; 
  return true;
};
Эта функция выводит tree директории. Но мне нужно чтоб в месте
PHP:
      echo 'File:'.$valuedir.'<br>';
значение $dir.$valuedir сохранялось... Пробовал использовать глобальный массив. Получилось вот такая функция.
PHP:
function tep_tree_in_array($dir,$tree=array()) {
  global $$tree;
  $array_dir=tep_get_files_from_dir($dir);
  foreach ($array_dir as $keydir=>$valuedir) {
    if (is_dir($dir.$valuedir)) {
      echo $dir.$valuedir.'<br>';
      tep_tree_in_array($dir.$valuedir.'/');
    } else {
      echo 'File:'.$dir.$valuedir.'<br>';
      array_push($$tree,$dir.$valuedir);
    };
  }; 
  return true;
};
Спасибо за внимание.

-~{}~ 27.10.05 14:57:

В этом случае получается ошибка
First argument should be an array, т.е. что первый эл-т должен быть массивом.
 

SiMM

Новичок
global это зло ;)
PHP:
function list_files_recursive($path){ // by SiMM
  static $level = 0, $arr;
  if (!$level++) $arr = array();
  if ($dir = @opendir($path))
    while (false !== $file = readdir($dir))
      if ($file == '.' || $file == '..') continue;
      elseif (is_dir($file = $path.'/'.$file)) list_files_recursive($file);
          else $arr[] = $file;
  closedir($dir);
  if (!--$level) return $arr;
}
[m]language.variables.scope#language.variables.scope.static[/m]
 

SiMM

Новичок
А по твоему скрипту - global $tree. $$tree - это кое-что другое.
[m]language.variables.variable[/m]
PS: остальное я не читал, вернее, не вчитывался.
 
Сверху