php 递归分类 $arr = array() 具体作用

$conn = mysql_connect('localhost', 'root', '123456') or die("Error: " . mysql_error());
mysql_select_db("test", $conn);
mysql_query("set names utf8", $conn);
/*
数据表结构:
id int,
pid int, 上级id
name varchar // 名称
*/
function get_array($id = 0)
{
global $conn;
$sql = "select * from e_cate where fid = '{$id}'";
$res = mysql_query($sql, $conn);
$arr = array();
if($res)
{
while($rows = mysql_fetch_assoc($res))
{
$rows['child'] = get_array($rows['id']);
$arr[] = $rows;
}

return $arr;
}
}
请问里面的 $arr = array(); 到底是怎么回事,为什么不是把全部的 $arr 数组置空呢?
和里面的 $arr[] = $rows, return $arr 中的 $arr 是什么具体关系???

$arr = array(); 只是 定义 数组 而且是在 循环外边定义的 当然不会清空数组,

就是在循环外边定义一个数组
然后在 循环里边 给它赋值。。追问

那当再次递归时,再次定义这个 $arr = array(); 这个应该跟上一次定义的一个样吧,是同一个 $arr 数组变量,这样为什么不是把 $arr置空了呢?而是之前的 $rows 也还保留在 $arr[] 里面????

追答

定义 $arr = array(); 是在 while 循环的外边 所以不会 置空
而 $arr = array(); 这个东西 是定义 数组 数组就是 一组一组的数据 第二次循环 只是把新的数据 追加进去而已 并不会置空。。。。。。。。。。。。。

追问

在外面定义的数组为空,这个应该是和里面用到的 $arr[]
是个一个数组变量吧,这么说应该算做重定义了且为空的,要么说当递归时,相当于重新定义了一个 $arr数组,与while 里面之前的 $arr[]
不是同一个数组,在内存的位置不同,如果这样的话,那么,在最后返回的 $arr
数组应该包含的是多个不同内存位置数组了?相当于作用域不同

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网