2015-07-23 3 views
0
ID   NAME      PARENT_ID 
1   Sales        
2   Marketing      1 
3   sales_optimiztaion.txt   2       
5   list.xls      6 
6   General data     1 

У меня есть иерархическая таблица с данными и функцией, которая подсчитывает, сколько файлов содержит определенную папку и ее подпапки. В этом случае папка Sales содержит два файла: list.xls - sales_optimiztaion.txt. Функция:Ошибка вызова рекурсивной функции PHP

<? 
function get_pathS($node) { 

global $countSS; 
$result = mysql_query('SELECT NAME, PARENT_ID FROM b_disk_object 
         WHERE ID="'.$node.'";'); 
$ro = mysql_fetch_array($result); 

    if ($ro['NAME']!='') { 
      $path=$ro['NAME']; 

      if($path=='Sales'){ 
       $countSS++; 
       $path=get_path($ro['PARENT_ID']); 
     } 

    $path=get_pathS($ro['PARENT_ID']); 
} 
return $countSS; 

}>

Функция работает отлично, но я хочу передать 'Sales' в качестве аргумента функции, как это:

<? 
function get_pathS($node, $manage) { 

global $countSS; 
$result = mysql_query('SELECT NAME, PARENT_ID FROM b_disk_object 
         WHERE ID="'.$node.'";'); 
$ro = mysql_fetch_array($result); 

    if ($ro['NAME']!='') { 
      $path=$ro['NAME']; 

      if($path==$manage){ 
       $countSS++; 
       $path=get_path($ro['PARENT_ID']); 
     } 

    $path=get_pathS($ro['PARENT_ID']); 
} 
return $countSS; 

} ?> 

Но после вызова функции как это:

while ($row = mysql_fetch_array($query)){ 

$check='Sales'; 
get_pathS($row['PARENT_ID'], $check); 
....... 

Не работает. В чем проблема?

+0

Работает ли оно, когда вы предоставляете значение по умолчанию для второго параметра? Например: 'function get_pathS ($ node, $ manage = null)' – jazZRo

+0

Он работает, но возвращает неверный счет – MarciSM

+0

Я объявил $ countSS как глобальную переменную, но что альтернатива этому, потому что я должен вызывать эту функцию несколько раз и каждый раз, когда он добавляет результат к предыдущему результату вызова функции? – MarciSM

ответ

1

при вызове этого (в теле функции)

$path=get_pathS($ro['PARENT_ID']); 

вы должны пройти здесь второй аргумент тоже. например

$path=get_pathS($ro['PARENT_ID'], $manage); 
+0

Еще один вопрос ... Я объявил $ countSS как глобальную переменную, но что альтернатива этому, потому что я должен вызывать эту функцию несколько раз и каждый раз, когда она добавляет результат к предыдущему результату вызова функции? – MarciSM

Смежные вопросы