浏览二叉树时,我想返回一个递归函数数组。特别是当二进制树中的元素到达条件(if语句)被插入到数组中时。毕竟,该元素返回一个全部数组。我的代码不起作用!??
function tree_view($clear_static = false,$conn,$index)
{
static $count = 0;
if ($clear_static) {
$count = 0;
}
$q=mysql_query("SELECT user_id FROM thanhvien WHERE gioithieu='".$index."'",$conn);
while($arr=mysql_fetch_assoc($q))
{
if (truongban($conn,$arr["user_id"],1)==true){
$mang[$count]=$arr["user_id"];
$count++;
}
tree_view(false,$conn,$arr["user_id"]);
}
return $mang;
}
$mang1=tree_view (true,$conn,anloc);
print_r($mang1);
答案 0 :(得分:1)
嗯,我看到的问题是你没有对递归调用返回的数组做任何事情,在这一行:
tree_view(false,$conn,$arr["user_id"]);
我建议在方法参数中包含数组和计数(不建议使用静态变量)。所以它会是这样的:
function tree_view($conn, $index, $mang, &$count)
{
$q=mysql_query("SELECT user_id FROM thanhvien WHERE gioithieu='".$index."'",$conn);
while($arr=mysql_fetch_assoc($q))
{
if (truongban($conn,$arr["user_id"],1)==true){
$mang[$count]=$arr["user_id"];
$count++;
}
tree_view($conn,$arr["user_id"], $mang, $count);
}
return $mang;
}
你会像这样调用你的方法:
$mang1[0] = "";
$count = 0;
$mang1 = tree_view ($conn, anloc, $mang1, $count); print_r($mang1);
答案 1 :(得分:0)
首先$mang
未初始化,但可能应该是:
// Always initialize variables - good style
$mang = array();
不要传递这个丑陋的$ count变量,只需附加新发现的数据:
// Will append the right side value as a new last element to $mang
$mang[] = $arr["user_id"];
接下来,您需要传递变量$anloc
:
$mang1=tree_view ( true, $conn, $anloc );
此版本可能会更好用:
function tree_view($conn, $index, $mang ) {
$q=mysql_query( 'SELECT user_id '
. ' FROM thanhvien '
. ' WHERE gioithieu = "' . mysql_real_escape_string ( $index ) . '"',
$conn
);
while( $arr = mysql_fetch_assoc( $q ) ) {
// better compare type-safe
if ( true === truongban( $conn, $arr["user_id"], 1 ) ){
// append found element
$mang[ ] = $arr["user_id"];
}
tree_view( $conn, $arr["user_id"], $mang );
}
return $mang;
} // tree_view