各位大侠,我想在递归里把循环出来的值全部放到数组里,然后获得数组,我这个递归获取不到全部的,请各位大侠多多指点,小弟拜谢
function bind1($db,$u_ppid)
{
$menus[] = array('menu_id' => $u_ppid, 'parent_id' => -1, 'name' => $u_ppid);
$strSql = "Select u_id,u_date,u_pid,u_type,u_types,u_status from u_list where u_pid='$u_ppid' order by u_date asc";
$result=$db->query($strSql); //发送SQL请求
$num=$db->rows($result);
if($num > 0)
{
$i = 0;
$menus;
while($row=$db->fetch($result))
{
$u_type = $row["u_type"];
if($u_type == "1")
{
$u_type = " < 左 > ";
}
else
{
$u_type = " < 右 > ";
}
$u_types = " < 单数:".$row["u_types"]." > ";
$u_id = $row["u_id"];
$u_date = $row["u_date"];
$u_pid = $row["u_pid"];
$u_status = $row["u_status"];
if($u_status == "1")
{
$u_status = " < 状态:禁用 > ";
}
else if($u_status == "0")
{
$u_status = " < 状态:启用 > ";
}
$str_title = $u_id.$u_type.$u_types.$u_status;
$menus[] = array('menu_id' => $u_id, 'parent_id' => $u_pid, 'name' => $str_title);
//$menus = array($u_id, $u_pid, $str_title);
$menus = array_merge_recursive($menus,bind2($db,$u_id,""));

}

/*foreach($menus as $aaa)
{
$i++;
echo "<script>alert('$i');</script>";
}*/
$opts = array('useStatusText' => 'true','closeSameLevel' => 'true');
echo menu($menus, $opts);
}
}
function bind2($db,$pid,$menus)
{
$strSql = "Select u_id,u_date,u_pid,u_type,u_types,u_status from u_list where u_pid='$pid'";
$result=$db->query($strSql); //发送SQL请求
$num=$db->rows($result);
if($num > 0)
{
while($row=$db->fetch($result))
{
$u_type = $row["u_type"];
if($u_type == "1")
{
$u_type = " < 左 > ";
}
else
{
$u_type = " < 右 > ";
}
$u_types = " < 单数:".$row["u_types"]." > ";
$u_id = $row["u_id"];
$u_date = $row["u_date"];
$u_pid = $row["u_pid"];
$u_status = $row["u_status"];
if($u_status == "1")
{
$u_status = " < 状态:禁用 > ";
}
else if($u_status == "0")
{
$u_status = " < 状态:启用 > ";
}
$str_title = $u_id.$u_type.$u_types.$u_status;
$menus[] = array('menu_id' => $u_id, 'parent_id' => $u_pid, 'name' => $str_title);
//$menus = array($u_id, $u_pid, $str_title);
bind2($db,$u_id,$menus);
}
}
/*$i = 0;
//foreach($menus as $aaa)
//{
// echo "<script>alert('$aaa');</script>";
//}*/
return $menus;
}

解决方案 »

  1.   

    两sql语句得改:
    $strSql = "Select u_id,u_date,u_pid,u_type,u_types,u_status from u_list where u_pid='{$u_ppid}' order by u_date asc"; $strSql = "Select u_id,u_date,u_pid,u_type,u_types,u_status from u_list where u_pid='{$pid}'";
      

  2.   

    你的 bind2 函数没有返回值
      

  3.   

    return $menus;
    这个就是bind2的返回值啊,我是不是写错地方了,应该在什么地方写合适啊
      

  4.   

    希望这篇文章可以帮到你,PHP多维数组的递归遍历
      

  5.   

    ...
                $menus[] = array('menu_id' => $u_id, 'parent_id' => $u_pid, 'name' => $str_title);
                //$menus = array($u_id, $u_pid, $str_title);
                bind2($db,$u_id,$menus);这里是如何接受返回值的?
            }
        }
        /*$i = 0;
        //foreach($menus as $aaa)
        //{
        //    echo "<script>alert('$aaa');</script>";
        //}*/
        return $menus;
    }
      

  6.   

    我先获取所有子节点 该怎么才能放到数组里啊  我的数据库是这样设置的,u_id,u_pid(父节点ID)主要就这俩   比如所我想把u_pid下所有子节点和子节点的子节点一直往下循环,知道没有,信息全都放到一个数组里,我这个递归应该怎么改啊
      

  7.   


    bind1的时候你知道这样用$menus = array_merge_recursive($menus,bind2($db,$u_id,""));那么bind2的时候你为什么要这样用?bind2($db,$u_id,$menus);而不是像bind1的时候那样用?再说你的$menus也不是引用传递,变化了你怎么能获取到
      

  8.   

    $str_title = $u_id.$u_type.$u_types.$u_status;
                $menus[] = array('menu_id' => $u_id, 'parent_id' => $u_pid, 'name' => $str_title);
                //$menus = array($u_id, $u_pid, $str_title);
         bind2($db,$u_id,$menus); //打印一下这个,看看有什么现象?
     
      

  9.   


    function bind1()
    {
        $menus[] = array('menu_id' =>'12', 'parent_id' => -1, 'name' => '123');
                      //发送SQL请求
        $num=1;
        if($num > 0)
        {
           
                $menus[] = array('menu_id' => '1', 'parent_id' => '12', 'name' => 'test');
                //$menus = array($u_id, $u_pid, $str_title);
                $menus = array_merge_recursive($menus,$this->bind2('t',1,""));
                
            }
            
            /*foreach($menus as $aaa)
            {
                $i++;
                echo "<script>alert('$i');</script>";
            }*/
            $opts = array('useStatusText' => 'true','closeSameLevel' => 'true');
            print_r($menus);
        }function bind2($db,$pid,$menus)
    {
                       //发送SQL请求
        $num = $pid;
       
        if($num > 0)
        {
            $pid --;
              
                $menus[] = array('menu_id' => '12', 'parent_id' => '232', 'name' => 'test2');
                //$menus = array($u_id, $u_pid, $str_title);
                $this->bind2($db,$pid,$menus);
          
        }
        /*$i = 0;
        //foreach($menus as $aaa)
        //{
        //    echo "<script>alert('$aaa');</script>";
        //}*/
        return $menus;
    }
    经改造这样是可以出结果滴!哈哈……