2010-06-14 3 views
-2
function build_path($cid) 
{ 
    static $fr=array(); 
    $DB = new MySQLTable; 
    $DB->TblName = 'shop_categories'; 
    $where['cat_id']['='] = $cid; 
    $res = $DB->Select('cat_id,cat_name,cat_parent', $where); 
    if($res !== false) 
    { 
     $pid = mysql_fetch_array($res); 
     if($pid['cat_parent'] !== "0") 
     { 
      $fr[] = $pid['cat_id']; 
      build_path($pid['cat_parent']); 
     } else { 
      $fr[] = $cid; 
      $fr = array_reverse($fr); 
      print_r($fr); 
      return $fr; 
     } 
    } 
} 

print_r(build_path(100)); 

Почему работает функция print_r, но вторая print_r возвращает NULL?Как вернуть статическую переменную PHP

+1

это наверняка входит в последний блок кода и выполняет возврат $ fr? –

+0

ВСЕ РАБОТА. Я только что переместил команду возврата в конец функции. THNKS 2 ВСЕ !!! – GOsha

+0

Я бы опубликовал ваш окончательный код в качестве ответа здесь. –

ответ

4

Как правило, для работы рекурсивной функции вам нужно что-то возвращать при вызове.

Попробуйте это в первый гнездовой, если блок:

return build_path($pid['cat_parent']); 
0

рекурсивные функции не должны использовать static для передачи данных через вызывающую - использовать аргументы вместо.

А зачем вам нужна эта строка:

if($res !== false) 

??

+0

этот класс возвращает идентификатор ресурса, если запрос в порядке, и false, если у меня есть ошибка mysql – GOsha

+0

@GOsha: если вы пишете правильные запросы - вы никогда не получите ошибку запроса mysql – zerkms

+0

, если сервер db не работает, или если что-то не получается – GOsha

2

FYI Вам не нужно будет писать рекурсивную функцию или выполнять N запросов для N уровней иерархии, если вы использовали один из различных методов хранения иерархических данных в базе данных.

0

Вместо build_path($pid['cat_parent']); в строке 14 использовать return build_path($pid['cat_parent']);.

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