连接先前结果值的静态变量 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);
}
我有这个递归函数,可以将所有中间类别从第 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);
}