php常见递归实现

今天我做了一个递归

首先,我们来看一下数据库表的设计

这个就是我们的数据库了

接下来我们首先获取数据
<?php
header('content-type:text/html;charset=utf-8');
$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','root');
$pdo->exec('set names utf8');
$sql='select * from test';
$res=$pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
实现一个简单的树状递归
function tree($data,$pid=0,$level=0) {
    static $arr;
    foreach($data as $k=>$v) {
        if($v['pid'] == $pid) {
            $v['level']=$level;
            $arr[]=$v;
            tree($data,$v['id'],$level+1);
        }
    }
    return $arr;
}

$res1=tree($res);

打印我们的数据print_r($res1);

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 交通工具
            [pid] => 0
            [level] => 0
        )

    [1] => Array
        (
            [id] => 2
            [name] => 汽车
            [pid] => 1
            [level] => 1
        )

    [2] => Array
        (
            [id] => 3
            [name] => 宝马
            [pid] => 2
            [level] => 2
        )

    [3] => Array
        (
            [id] => 8
            [name] => bm1
            [pid] => 3
            [level] => 3
        )

    [4] => Array
        (
            [id] => 7
            [name] => 火车
            [pid] => 1
            [level] => 1
        )

    [5] => Array
        (
            [id] => 4
            [name] => 食品
            [pid] => 0
            [level] => 0
        )

    [6] => Array
        (
            [id] => 5
            [name] => 水果
            [pid] => 4
            [level] => 1
        )

    [7] => Array
        (
            [id] => 6
            [name] => 苹果
            [pid] => 5
            [level] => 2
        )

)

紧接着我们来实现一个子孙递归
function son($data,$pid=0) {
    $arr=array();
    foreach($data as $k=>$v) {
        if($v['pid'] == $pid) {
            $v['son']=son($data,$v['id']);
            $arr[]=$v;
        }
    }
    return $arr;
}

以上就是我们的一个子孙递归,我们试着调用一下

$res2=son($res);

print_r($res2);

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 交通工具
            [pid] => 0
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 汽车
                            [pid] => 1
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => 宝马
                                            [pid] => 2
                                            [son] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 8
                                                            [name] => bm1
                                                            [pid] => 3
                                                            [son] => Array
                                                                (
                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 7
                            [name] => 火车
                            [pid] => 1
                            [son] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 4
            [name] => 食品
            [pid] => 0
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [name] => 水果
                            [pid] => 4
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 6
                                            [name] => 苹果
                                            [pid] => 5
                                            [son] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值