您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php数组转换成树的几个例子_PHP教程

2025/4/23 18:19:43发布12次查看
php代码
 代码如下
* $sourcearr 原来的数组 
* $key 主键 
* $parentkey 与主键关联的父主键 
* $childrenkey 生成的孩子的键名 

*/
function arraytotree($sourcearr, $key, $parentkey, $childrenkey)  
{  
    $tempsrcarr = array();  
    foreach ($sourcearr as  $v)  
    {  
        $tempsrcarr[$v[$key]] = $v;  
    }  
    $i = 0;  
    $count = count($sourcearr);  
    for($i = ($count - 1); $i >=0; $i--)  
    {  
        if (isset($tempsrcarr[$sourcearr[$i][$parentkey]]))  
        {  
           $tarr = array_pop($tempsrcarr);  
           $tempsrcarr[$tarr[$parentkey]][$childrenkey] = (isset($tempsrcarr[$tarr[$parentkey]][$childrenkey]) && is_array($tempsrcarr[$tarr[$parentkey]][$childrenkey])) ? $tempsrcarr[$tarr[$parentkey]][$childrenkey] : array();  
           array_push ($tempsrcarr[$tarr[$parentkey]][$childrenkey], $tarr);  
        }  
    }  
    return $tempsrcarr;  
}
php代码
* 将数组转换成树
* 例子:将 array(
array('id'=>1,'parentid' => 0,'name'=> 'name1')
,array('id'=>2,'parentid' => 0,'name'=> 'name2')
,array('id'=>4,'parentid' => 1,'name'=> 'name1_4')
,array('id'=>15,'parentid' => 1,'name'=> 'name1_5')
);转换成
* array(
[1] => array([id] => 1
[parentid] => 0
[name] => name1
[children] => array(
[0] => array([id] => 15,[parentid] => 1,[name] => name1_5)
[1] => array([id] => 4,[parentid] => 1,[name] => name1_4)
)
)
[2] => array([id] => 2,[parentid] => 0,[name] => name2)
)
* @param array $sourcearr 要转换的数组
* @param string $key 数组中确认父子的key,例子中为“id”
* @param string $parentkey 数组中父key,例子中为“parentid”
* @param type $childrenkey 要在树节点上索引子节点的key,例子中为“children”
* @return array 返回生成的树
*/
 代码如下  
function arraytotree($sourcearr, $key, $parentkey, $childrenkey)  
{  
    $tempsrcarr = array();
$allroot = true;  
    foreach ($sourcearr as  $v)  
    {  
        $isleaf = true;  
        foreach ($sourcearr as $cv )  
        {  
            if (($v[$key]) != $cv[$key])  
            {  
                if ($v[$key] == $cv[$parentkey])  
                {  
                    $isleaf = false;  
                }  
                if ($v[$parentkey] == $cv[$key])  
                {  
                    $allroot = false;  
                }  
            }  
        }  
        if ($isleaf)  
        {  
            $leafarr[$v[$key]] = $v;  
        }  
        $tempsrcarr[$v[$key]] = $v;  
    }  
    if ($allroot)  
    {  
        return $tempsrcarr;  
    }  
    else  
    {  
        unset($v, $cv, $sourcearr, $isleaf);  
        foreach ($leafarr as  $v)  
        {  
            if (isset($tempsrcarr[$v[$parentkey]]))  
            {  
                $tempsrcarr[$v[$parentkey]][$childrenkey] = (isset($tempsrcarr[$v[$parentkey]][$childrenkey]) && is_array($tempsrcarr[$v[$parentkey]][$childrenkey])) ? $tempsrcarr[$v[$parentkey]][$childrenkey] : array();  
                array_push ($tempsrcarr[$v[$parentkey]][$childrenkey], $v);  
                unset($tempsrcarr[$v[$key]]);  
            }  
        }  
        unset($v);  
        return arraytotree($tempsrcarr, $key, $parentkey, $childrenkey);  
    }  
}
php代码
/**递归方法:**/
$rows = array(
0 => array('id' => 1, 'name' => '菜单1', 'parentid' => 0)
, 1 => array('id' => 2, 'name' => '菜单2', 'parentid' => 0)
, 2 => array('id' => 3, 'name' => '菜单3', 'parentid' => 0)
, 3 => array('id' => 4, 'name' => '菜单1_1', 'parentid' => 1)
, 4 => array('id' => 5, 'name' => '菜单1_2', 'parentid' => 1)
, 5 => array('id' => 6, 'name' => '菜单2_1', 'parentid' => 2)
);
print_r(gettree($rows, 0, 'id', 'parentid'));
 代码如下
/** 
 * 数组根据父id生成树 
 * @staticvar int $depth 递归深度 
 * @param array $data 数组数据 
 * @param integer $pid 父id的值 
 * @param string $key id在$data数组中的键值 
 * @param string $chrildkey 要生成的子的键值 
 * @param string $pkey 父id在$data数组中的键值 
 * @param int $maxdepth 最大递归深度,防止无限递归 
 * @return array 重组后的数组 
 */  
function gettree($data, $pid = 0, $key = 'id', $pkey = 'parentid', $childkey = 'child', $maxdepth = 0){  
    static $depth = 0;  
    $depth++;  
    if (intval($maxdepth)     {  
        $maxdepth = count($data) * count($data);  
    }  
    if ($depth > $maxdepth)  
    {  
        exit(error recursion:max recursion depth {$maxdepth});  
    }  
    $tree = array();  
    foreach ($data as $rk => $rv)  
    {  
        if ($rv[$pkey] == $pid)  
        {  
            $rv[$childkey] = gettree($data, $rv[$key], $key, $pkey, $childkey, $maxdepth);  
            $tree[] = $rv;  
        }  
    }  
    return $tree;  
}
一个实例
 代码如下 复制代码
tree
array('id'=>1, 'cname'=>'一级分类', 'pid'=>0),
100 => array('id'=>100, 'cname'=>'特意加进去的二级分类', 'pid'=>1),
101 => array('id'=>101, 'cname'=>'特意加进去的二级分类2222222222', 'pid'=>1),
2 => array('id'=>2, 'cname'=>'二级分类', 'pid'=>1),
3 => array('id'=>3, 'cname'=>'三级分类', 'pid'=>2),
4 => array('id'=>4, 'cname'=>'四级分类', 'pid'=>3),
5 => array('id'=>5, 'cname'=>'四级分类2', 'pid'=>3),
200 => array('id'=>200, 'cname'=>'55555', 'pid'=>5),
6 => array('id'=>6, 'cname'=>'另一级分类', 'pid'=>0),
7 => array('id'=>7, 'cname'=>'first first first', 'pid'=>0),
8 => array('id'=>8, 'cname'=>'first first first', 'pid'=>7),
);
// 指定分类id,返回子类量(不进行深度递归)
function getchildtotal($id)
{
global $tree;
$total = 0;
foreach($tree as $value)
{
if ($id == $value['pid'])
{
$total++; 
}
}
return $total;
}
// 指定分类id,www.111cn.net并返回数组(不进行深度递归)
function getchildarray($id)
{
global $tree;
$array = array();
foreach($tree as $key=>$value)
{
if ($id == $value['pid'])
{
$array[$key] = $value;
}
}
return $array;
}
// 递归查询方式将树数组转换成html嵌套树
function gettreehtml($tree,$level = 0)
{
if ($tree)
{
$level += 1;
foreach($tree as $id => $node)
{
$html .=
;
$html .= ''.$node['cname'].;
if (getchildtotal($node['id']))
{
$tree_last = getchildarray($node['id']); $html .= '
';
$html .= gettreehtml($tree_last,$level);
$html .= ''; }
$html .= '
';
}
}
return $html;
} $html = gettreehtml( getchildarray(0) );
echo '
';
echo $html;
echo '
'; ?>
http://www.bkjia.com/phpjc/730238.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/730238.htmltecharticlephp代码 代码如下 * $sourcearr 原来的数组 * $key 主键 * $parentkey 与主键关联的父主键 * $childrenkey 生成的孩子的键名 * */ function arraytotree($source...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product