ホームページ  >  記事  >  バックエンド開発  >  再帰を使用しない無限レベリングを実装する PHP の例を共有する_PHP チュートリアル

再帰を使用しない無限レベリングを実装する PHP の例を共有する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:32:11977ブラウズ

再帰なしの2つのツリー配列演算関数

コードをコピー コードは次のとおりです:

/**
* 親ノードのツリー配列を作成します
* パラメータ
* $ar 配列、隣接リストに編成されたデータ
* $id 配列内の主キーまたは関連キー名としての添え字
* $pid 親キーとしての添え字配列内の、または関連付けられたキー名
* 多次元配列を返します
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach( $ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ){
if( ! isset($ t[$item[$pid]]['parent'][$item[$pid]]) )
$t[$item[$id]]['parent'][$item[$pid] ] =& $t[$item[$pid]];
}
}
return $t;
}


/**
* 子ノードのツリー配列を作成します
* パラメータ
* $ar 配列、隣接リストに編成されたデータ
* $id 配列内の主キーまたは関連するキー名としての添え字
* $pid 親キーとしての添え字配列内の、または関連付けられたキー名
* 多次元配列を返します
**/
function find_child($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id] ] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ) {
$t[$item[$pid]]['child'][$item [$id]] =& $t[$k];
}
}
return $t;
}

使用例:

コードをコピーします コードは次のとおりです:

$data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'grandfather '),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父親'),
array('ID'=>3, 'PARENT'=> 1, '名前'=>'叔父'),
配列('ID'=>4, '親'=>2, '名前'=>'自分'),
配列('ID'= >5, '親'=>4, '名前'=>'息子'),
);

$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');


実行効果:

コードをコピーします コードは次のとおりです:

Array
(
    [1] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [ID] => 2
                            [PARENT] => 1
                            [NAME] => 父亲
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [ID] => 4
                                            [PARENT] => 2
                                            [NAME] => 自己
                                            [child] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [ID] => 5
                                                            [PARENT] => 4
                                                            [NAME] => 儿子
                                                        )

                                                )

                                        )

                                )

                        )

                    [3] => Array
                        (
                            [ID] => 3
                            [PARENT] => 1
                            [NAME] => 叔伯
                        )

                )

        )

    [2] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [ID] => 4
                            [PARENT] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
[5] => > [5] =>名前] =>息子
)

)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/756337.html技術記事次のように、2 つのツリー配列操作関数のコードを再帰なしでコピーします。 /** * 親ノードのツリー配列を作成します* パラメーター* $ar 配列、隣接リスト モードで編成されたデータ* $id 配列...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。