PHP无限分级数据完毕程序代码,PHP数组Infiniti分级

先看三个php与mysql数据库的特别分类

 代码如下

建构数量库 :
id,fid,fname(id和fid都不可或缺是数字类型况兼fid的暗中认可值必须求设成0;

/**
 * 创立父节点树形数组
 * 参数
 * $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;
}

<?php
$stime=microtime();

/**
 * 成立子节点树形数组
 * 参数
 * $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];

$db=@mysql_connect("localhost","root","micronsky.net")   or die("数据库连接失入");
mysql_select_db("temp",$db);
//定义第一级分类
function mainfl()
{
     global $db;
$result=mysql_query("select id,fid,fname from wxjfl where fid=0   order by id desc",$db);
if ($myrow=mysql_fetch_array($result)) {
   do {
   echo $myrow["fname"];
   echo "<br>";
   echo subfl($myrow["id"],"  ");   //此处调用子级分类函数
   }
   while ($myrow=mysql_fetch_array($result));
}

      $t[$k]['reference'] = true;
    }
  }
  return $t;
}

}
//定义子级分类
function subfl($fid,$strdis)
{
global $db;
$result1=mysql_query("select id,fid,fname from wxjfl where fid=$fid   order by id desc",$db);
if ($myrow1=mysql_fetch_array($result1)) {
do {
   //echo $strdis;
   echo $strdis.$myrow1["fname"];
   echo "<br>";
   subfl($myrow1["id"],"  ".$strdis); //这里必须要注意并无需像上边拾叁分函数那样echo ...只要直接调用子级分类函数并付值就行了!同不时间这里也是递归部分
}
while ($myrow1=mysql_fetch_array($result1));
}
}

 

echo mainfl();

示例:

$ltime=microtime();
echo "<br>";
echo number_format($ltime-$stime,4);   //总括施行时间,这里就比ASP快多了,但那跟写法没多大关系,首若是PHP本高丽参预了加快器的原故!

$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平均分摊到三个数组中,然后找到她们的 parent 或 children ,通过引用将 平均分摊的要素挂接到 parent 、children 下,

这段日子大家一直利用数组进行分页

但被引述的成分照旧存在于平均分摊的数组中,因而,在实际应用时,最佳标记那三个被引用的成分,以幸免以她们为根起初遍历,导致重复。

 代码如下

        foreach ($p as $key => $item) {
            if($item['reference']) continue;
            print_r($item);
        }

/**
 * 成立父节点树形数组
 * 参数
 * $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]];

        foreach ($c as $key => $item) {
            if($item['reference']) continue;
            print_r($item);
        }

          $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];

递归法,PHP 数组成分被删去后,数组游标会归零,因而在遍历进度中部分早已找到 “归宿” 的元素也不得不留在数组中,不能回落后继成分的查找范围:

      $t[$k]['reference'] = true;
    }
  }
  return $t;
}

$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=>$item){
            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));

 代码如下

$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平均分摊到二个数组中,然后找到他们的 parent 或 children ,通过援引将 平均分摊的成分挂接到 parent 、children 下,

但被引述的成分依旧留存于平均分摊的数组中,因而,在其实使用时,最佳标记那么些被引述的要素,以制止以他们为根初叶遍历,导致重复。

 代码如下

        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=>$item){
            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));

本文由365bet体育在线官网发布于365bet,转载请注明出处:PHP无限分级数据完毕程序代码,PHP数组Infiniti分级

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。