PHP 遞歸和迭代

博客新開,什么都沒有,先從印象筆記貼一篇以前的筆記

//用于操作的數(shù)據(jù)
$area = array(
        array('id'=>1,'name'=>'安徽','parent'=>0),
        array('id'=>2,'name'=>'海淀','parent'=>7),
        array('id'=>3,'name'=>'濉溪縣','parent'=>5),
        array('id'=>4,'name'=>'昌平','parent'=>7),
        array('id'=>5,'name'=>'淮北','parent'=>1),
        array('id'=>6,'name'=>'朝陽','parent'=>7),
        array('id'=>7,'name'=>'北京','parent'=>0),
        array('id'=>8,'name'=>'上地','parent'=>2)
    );
//查找子欄目
function findson($arr,$id=0){
    $sons = array();
    foreach($arr as $k => $v){
        if ($v['parent'] == $id) {
            $sons[] = $v;
        }
    }
    return $sons;
}

print_r(findson($area,0));die;
//遞歸查找家譜樹
function familytree($arr,$id){
    $tree = array();
    foreach ($arr as $k => $v) {
        if ($v['id'] == $id) {
            if ($v['parent'] > 0) {
            $tree =array_merge($tree,familytree($arr,$v['parent']));
            }
            $tree[] = $v;
        }
    }
    return $tree;
}
print_r(familytree($area,8));
//遞歸查找子孫樹
function subtree($arr,$id,$lev=1){
    $subs = array();
    foreach($arr as $k => $v){
        if ($v['parent'] == $id) {
            $v['lev'] = $lev;
            $subs[] = $v;
            $subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));
        }
    }
    return $subs;
}
print_r(subtree($area,1));
//迭代查找子孫樹
function subtree($arr,$parent=0){
    $task = array($parent);//任務表
    $tree = array();//地區(qū)表
    while(!empty($task)){
        $flag = false;
        foreach ($arr as $k => $v) {
            if ($v['parent'] == $parent) {
                $tree[] = $v;
                array_push($task,$v['id']);//把最新的地區(qū)ID入任務棧
                $parent = $v['id'];
                unset($arr[$k]);//把找到的單元UNSET掉
                $flag = true;
            }
        }
        if ($flag == false) {
            array_pop($task);
            $parent = end($task);
        }
        print_r($task);
    }
    return $tree;
}

print_r(subtree($area,0));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容