连接上一个结果值php的静态变量


Static variable concatenating the previous result value php

我有一个递归函数,可以将所有中间类别从第n个子级获取到父级。但是,当id发生变化时,变量$cats会连接到前一个结果。在执行第二个第n个子id之前,我不希望它为null。参见以下代码

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 )

不要使用静态变量,通过引用来实现您的目标:

   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);
    }