从Recursive返回数组 - Php

时间:2012-02-24 05:50:04

标签: php arrays recursion

浏览二叉树时,我想返回一个递归函数数组。特别是当二进制树中的元素到达条件(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);

2 个答案:

答案 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