memcache php 缓存父子节点树 部门组织结构 省市地区下拉列表 常用信息

本文详细介绍了如何从数据库中获取并构建父子节点树,包括节点的层级、名称、父节点等信息,并通过设置memcache缓存提高效率。同时,实现动态节点树功能,可以根据用户选择展示指定节点下的子节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//首先从数据库中获取父子节点树
function region_array( $DEPT_PARENT, $DEPARTMENT = array( ), $DEPT_LEVEL = 0 )
{
  global $connection;
  global $DEPT_LINE;
  $DEPT_LINE1 = $DEPT_LINE;
  $DEPT_LINE .= "│";
  $COUNT = 0;
  ++$DEPT_LEVEL;
  $query = "SELECT region_id,region_name,parent_id from osg_region where parent_id='".$DEPT_PARENT."' order by region_id";
  $cursor = exequery( $connection, $query );
  while ( $ROW = mysql_fetch_array( $cursor ) )
  {
    ++$COUNT;
    $DEPT_ID = $ROW['region_id'];
    //$DEPT_NO = $ROW['DEPT_NO'];
    $DEPT_NAME = $ROW['region_name'];
    $DEPT_PARENT = $ROW['parent_id'];
    //$IS_ORG = $ROW['IS_ORG'];
    $DEPT_NAME = str_replace( "\"", "\\\"", $DEPT_NAME );
    if ( array_key_exists( $DEPT_PARENT, $DEPARTMENT ) )
    {
      $DEPT_LONG_NAME = $DEPARTMENT[$DEPT_PARENT]['DEPT_LONG_NAME']."/".$DEPT_NAME;
    }
    else
    {
      $DEPT_LONG_NAME = $DEPT_NAME;
    }
    $POSTFIX = _( " " );
    if ( $COUNT == mysql_num_rows( $cursor ) )
    {
      $DEPT_LINE = substr( $DEPT_LINE, 0, 0 - strlen( $POSTFIX ) ).$POSTFIX;
    }
    if ( $COUNT == mysql_num_rows( $cursor ) )
    {
      $DEPT_LINE2 = $DEPT_LINE1."└";
    }
    else
    {
      $DEPT_LINE2 = $DEPT_LINE1."├";
    }
    $DEPARTMENT[$DEPT_ID] = array(
      "DEPT_NAME" => $DEPT_NAME,
      "DEPT_PARENT" => $DEPT_PARENT,
      //"DEPT_NO" => $DEPT_NO,
      "DEPT_LEVEL" => $DEPT_LEVEL,
      "DEPT_LONG_NAME" => $DEPT_LONG_NAME,
      //"IS_ORG" => $IS_ORG
    );
    $DEPARTMENT_STR .= "   \"".$DEPT_ID."\" => array(\"DEPT_NAME\" => \"{$DEPT_NAME}\", \"DEPT_PARENT\" => {$DEPT_PARENT}, \"DEPT_NO\" => \"{$DEPT_NO}\", \"DEPT_LEVEL\" => {$DEPT_LEVEL}, \"DEPT_LONG_NAME\" => \"{$DEPT_LONG_NAME}\", \"IS_ORG\" => \"{$IS_ORG}\", \"DEPT_LINE\" => \"{$DEPT_LINE2}\"),\n";
    $DEPARTMENT_STR .= dept_array( $DEPT_ID, $DEPARTMENT, $DEPT_LEVEL );
  }
  $DEPT_LINE = $DEPT_LINE1;
  return $DEPARTMENT_STR;
}

 

 

 

// 设置memcache缓存

function cache_region( )
{
  global $td_cache;
  global $SYS_REGION;
  $DEPARTMENT_STR = "\$SYS_DEPARTMENT=array(\n".substr( region_array( 0 ), 0, -2 )."\n);";
  eval( $DEPARTMENT_STR );
  include_once( "inc/cache/Cache.php" );
  $td_cache->set( "SYS_DEPARTMENT", $SYS_REGION, 0 );
  include_once( "inc/utility_cache.php" );
  cache_org_xml( );
}

 

//动态节点树
function my_region_tree( $DEPT_ID, $DEPT_CHOOSE, $POST_OP, $NO_CHILD_DEPT = 0 )
{
  global $connection;
  global $SYS_REGION;
  if ( is_array( $POST_OP ) )
  {
    $DEPT_PRIV = $POST_OP['DEPT_PRIV'];
    $DEPT_ID_STR = $POST_OP['DEPT_ID_STR'];
  }
  if ( $DEPT_ID == 0 )
  {
    $LEVEL = 0;
  }
  $DEPT_PRIV_ID_STR = my_dept_priv_id( $DEPT_PRIV, $DEPT_ID_STR );
  reset( &$SYS_DEPARTMENT );
  while ( $DEPT = current( &$SYS_DEPARTMENT ) )
  {
    $ID = key( &$SYS_DEPARTMENT );
    if ( $ID == $DEPT_ID )
    {
      $LEVEL = $DEPT['DEPT_LEVEL'];
    }
    if ( !isset( $LEVEL ) || $ID != $DEPT_ID )
    {
      next( &$SYS_DEPARTMENT );
    }
    else
    {
      if ( $NO_CHILD_DEPT && $NO_CHILD_DEPT == $ID )
      {
        do
        {
        } while ( $DEPT_NEXT = next( &$SYS_DEPARTMENT ) && !( $DEPT_NEXT['DEPT_LEVEL'] <= $SYS_DEPARTMENT[$NO_CHILD_DEPT]['DEPT_LEVEL'] ) );
        prev( &$SYS_DEPARTMENT );
      }
      if ( $DEPT['DEPT_LEVEL'] <= $LEVEL && $ID != $DEPT_ID )
      {
        break;
      }
      $DEPT_NAME = $DEPT['DEPT_NAME'];
      $DEPT_NAME = htmlspecialchars( $DEPT_NAME );
      if ( !$POST_OP && find_id( $DEPT_PRIV_ID_STR, $ID ) )
      {
        $OPTION_TEXT .= "<option ";
        if ( $ID == $DEPT_CHOOSE )
        {
          $OPTION_TEXT .= "selected ";
        }
        $OPTION_TEXT .= "value=".$ID.">".$DEPT['DEPT_LINE'].$DEPT_NAME."</option>\n";
      }
      next( &$SYS_DEPARTMENT );
    }
  }
  reset( &$SYS_DEPARTMENT );
  return $OPTION_TEXT;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值