PHP における無限階層データの階層処理コード array_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:13:57
オリジナル
1176 人が閲覧しました

复制代码代码如下:

/**
* 親ノードのツリー配列を作成します
* パラメータ
* $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]];
$t[$k]['reference'] = true;
}
}
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];
$t[$k]['reference'] = true;
}
}
return $t;
}

例:
复制代码代码如下:

$data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
array('ID'=>2, 'PARENT'=>1, ' NAME'=>'父亲'),
array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
array('ID'=>4 , 'PARENT'=>2, 'NAME'=>'自己'),
array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子')
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');

上の両方の方法は、すべての节点按id平摊を 1 つの数グループに到達し、その後他の親または子に到達する、参照を通じて平を取得します。要素は親、子の下にありますが、参照されている要素は平坦な数のグループ内に存在するため、実際の使用時には、ルートの最初の重複を避けるために、参照されている要素を確認することが望ましいです。

复制番号代次のように:
foreach ($p as $key => $item) {
if($item['reference']) continue;
print_r($item );
}
foreach ($c as $key => $item) {
if($item['reference']) continue;
print_r($item);
}

递归法,PHP 数组元素删除後,数组游标会归零,故に遍歴中にすでに「归宿」に到達した要素の一部も数集団内に留まらず,無法弩减後继要素の検索範囲:

彌制コード 代码如下:

$mylist = array(array( 'parent_id'=>0,'id'=>1),
array( 'parent_id'=>0,'id'=>2),
array( ' parent_id'=>0,'id'=>3),
array( 'parent_id'=>2,'id'=>4),
array( 'parent_id'=>2,'id' =>5),
array( 'parent_id'=>3,'id'=>6),
array( 'parent_id'=>3,'id'=>7),
array( ' parent_id'=>4,'id'=>8),
array( 'parent_id'=>5,'id'=>9),
array( 'parent_id'=>5,'id' =>10)
);

function _findChildren($list, $p_id){ //数据层级化,
$r = array();
foreach($list as $id=>$ite​​m){
if($item['parent_id'] == $p_id) {
$length = count($r);
$r[$length] = $item;
if($t = $this->_findChildren($list, $item['id'] ) ){
$r[$length]['children'] = $t;
}
}
return $r;
}

print_r(_findChildren($mylist, 0));


http://www.bkjia.com/PHPjc/326411.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326411.html技術記事复制代码代码如下: /** * 创建父节点树形数組 * パラメータ * $ar 数組、邻接列表形式組织のデータ * $id 数組中主键の下标または关联键名として * $pid 数組...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!