2015-12-02 58 views
1

我有这个递归函数来从第n个孩子获得所有中间类别到父项。但是,当id正在改变变量$ cats连接到前一个结果。我不想在执行第二个第n个孩子ID之前为空。 请参见下面的代码静态变量连接以前的结果值php

function find_parent($cat_id,$conn){ 
    static $cats; 
    if ($cat_id > 0){ 
     $q = mysqli_query($conn,'SELECT pw_cat_pid FROM pw_categories WHERE pw_cat_id = ' . $cat_id) or die(mysqli_error($conn)); 
     $r = mysqli_fetch_assoc($q); 
    $cats[] = $cat_id; 
    find_parent($r["pw_cat_pid"],$conn); 
    } 
return $cats; 
} 


$sub_cat = array(5,122); 

foreach($sub_cat as $value) 
{ 
$cat = find_parent($value); 
print_r($cat); 
} 


It showed below result: 

If $sub_cat = 5 
Array ([0] => 5 [1] => 3 [2] => 1) 

If $sub_cat = 122 

Array ([0] => 5 [1] => 3 [2] => 1 [3] => 121 [4] => 97 [5] => 1) 

回答

0

不要使用静态变量,通过-refrence使用能达到您的目标:

function find_parent($cat_id,$conn, &$cats=array()){ 
     if ($cat_id > 0){ 
      $q = mysqli_query($conn,'SELECT pw_cat_pid FROM pw_categories WHERE pw_cat_id = ' . $cat_id) or die(mysqli_error($conn)); 
      $r = mysqli_fetch_assoc($q); 
     $cats[] = $cat_id; 
     find_parent($r["pw_cat_pid"],$conn,$cats); 
     } 
    return $cats; 
    } 


    $sub_cat = array(5,122); 

    foreach($sub_cat as $value) 
    { 
    $cat = find_parent($value,$conn); 
    echo "<pre>"; 
    print_r($cat); 

    }