php 无限级缓存的类的扩展
php 无限级缓存的类的扩展
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:

复制代码 代码如下:

<?php

/**

* 功能: 根据条件建立分类缓存减少类别使用

* 创建日期:Thu May 31 15:55:11 CST 2007

* 最后更新:

* 作者: sanshi <sanshi0815@tom.com>

*/

class treeCache

{

var $tableName = "index_category"; //表名

var $where = "1"; //where条件

var $pidStr ="i_c_pid"; //pid 的字段名

var $tempCode = array(); //生成文件的数组

var $pid = '0'; //pid的初始值

var $db ; //数据库句柄

var $idStr="i_c_id"; //取得的数据id

var $title = "i_c_cn"; //名字字段

var $createArrayName = "treeCache"; //建立的数组名字

var $createFileName =""; //建立文件的名字

var $appendArr = array(); //附加的属性,需要字段名与数据里的名对应

var $is_utf8 = false;

function treeCache()

{

}

function set($db)

{

$this->db = $db;

$this->tempCode[] = "<?php";

}

//取得所有的一级

function getRootID()

{

$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE

{$this->pidStr}='{$this->pid}' AND {$this->where} ";

//exit($sql);

$result = $this->db->select($sql);

$temp = array();

foreach ($result as $r)

{

$temp[]=$r["{$this->idStr}"];

}

$this->tempCode[] = "${$this->createArrayName}['root']='".implode(',',$temp)."';";

//print_r($temp);

return $temp;

}

//取得子id

function getChildren($pid)

{

$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE

{$this->pidStr}='{$pid}' AND {$this->where} ";

$result = $this->db->select($sql);

$temp = array();

foreach ($result as $r)

{

$temp[]=$r["{$this->idStr}"];

}

return $temp;

}

//取得夫id

function getParent($cid)

{

$sql = "SELECT {$this->pidStr} FROM {$this->tableName} WHERE

{$this->idStr}='{$cid}' AND {$this->where} ";

$result = $this->db->select($sql);

//print_r($result);exit();

return $result[0]["{$this->pidStr}"];

}

//取得上级的id

function getPidStr($cid,$pidStr="")

{

$pid=$this->getParent($cid);

$temp = array();

while ($pid!=$this->pid && !emptyempty($pid)) {

$temp[] = $pid;

$pid=$this->getParent($pid);

}

//print_r($temp);

return implode(',',$temp);

}

//取得深度

function getDepth($cid,$depth=0)

{

$pid=$this->getParent($cid);

$depth++;

if( $pid != $this->pid && !emptyempty($pid))

$depth = $this->getDepth($pid,$depth);

return $depth;

}

//建立文件

function make()

{

if(emptyempty($this->createFileName))

$this->createFileName = "{$this->createArrayName}.data.php";

$rootArr = $this->getRootID();

$selectF = "{$this->idStr},{$this->title},{$this->pidStr}";

foreach ($this->appendArr as $app)

{

if(emptyempty($app)) continue;

$selectF .=",{$app}";

}

$sql = "SELECT {$selectF} FROM {$this->tableName} WHERE

{$this->where}";

$result = $this->db->select($sql);

for ($i=0;$i<count($result);$i++)

{

//id值

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['id']='{$result[$i]["{$this->idStr}"]}';";

//标题

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['title']='{$result[$i]["{$this->title}"]}';";

//父id

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pid']='{$result[$i]["{$this->pidStr}"]}';";

//子id

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['cid']='".implode(',',$this->getChildren($result[$i]["$this->idStr"]))."';";

//目录深度

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['depth']='".$this->getDepth($result[$i]["$this->idStr"])."';";

//父id的id串

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pstr']='".$this->getPidStr($result[$i]["$this->idStr"])."';";

//添加的附加属性

foreach ($this->appendArr as $app)

{

if(emptyempty($app)) continue;

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['{$app}']='{$result[$i]["{$app}"]}';";

}

}

$this->tempCode[] = "return ${$this->createArrayName};";

$this->tempCode[] = "?>";

//$content = implode("n",$this->tempCode);

//print_r($this->tempCode);

$content = implode("n",$this->tempCode);

//建立文件

$fio=Factory::getBaseClass('FileIO');

if($this->is_utf8) $content = "xEFxBBxBF".$content;

$fio->writeFile($this->createFileName,$content);

return $content ;

}

}

//加载的文件就是为了,数据库连接

//需要数据库有 select 方法

/*

include_once(dirname(dirname(__FILE__))."/config/config.inc.php");

include_once(CLASSES_PATH."factryObject.class.php");

$db = factryObject::getDB('indexPush');

$c = new treeCache($db);

$c->make();

//exit();

//做分析

include_once("treeCache.data.php");

$treeCache=isset($treeCache) ? $treeCache : array();

$rootStr = isset($treeCache['root']) ? $treeCache['root'] : "";

echo parseTree($treeCache,$rootStr);

function parseTree($treeCache,$rootStr)

{

$tempStr = "";

$temp = explode(',',$rootStr);

foreach ($temp AS $cid)

{

$info = $treeCache[$cid];

$cidStr = $info['cid'];

$tempStr .= str_repeat('-',($info['depth']-1)*3);

$tempStr.=$info['title'];

if(empty($info['pid']))

{

//附加操作

}

$tempStr .= "<br/>";

if(!empty($info['cid']))

$tempStr .=parseTree($treeCache,$info['cid']);

}

return $tempStr;

}

*/

?>

<?php

/**

* 功能: 根据条件建立分类缓存减少类别使用

* 创建日期:Thu May 31 15:55:11 CST 2007

* 最后更新:

* 作者: sanshi <sanshi0815@tom.com>

*/

class treeCache

{

var $tableName = "index_category"; //表名

var $where = "1"; //where条件

var $pidStr ="i_c_pid"; //pid 的字段名

var $tempCode = array(); //生成文件的数组

var $pid = '0'; //pid的初始值

var $db ; //数据库句柄

var $idStr="i_c_id"; //取得的数据id

var $title = "i_c_cn"; //名字字段

var $createArrayName = "treeCache"; //建立的数组名字

var $createFileName =""; //建立文件的名字

var $appendArr = array(); //附加的属性,需要字段名与数据里的名对应

var $is_utf8 = false;

function treeCache()

{

}

function set($db)

{

$this->db = $db;

$this->tempCode[] = "<?php";

}

//取得所有的一级

function getRootID()

{

$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE

{$this->pidStr}='{$this->pid}' AND {$this->where} ";

//exit($sql);

$result = $this->db->select($sql);

$temp = array();

foreach ($result as $r)

{

$temp[]=$r["{$this->idStr}"];

}

$this->tempCode[] = "${$this->createArrayName}['root']='".implode(',',$temp)."';";

//print_r($temp);

return $temp;

}

//取得子id

function getChildren($pid)

{

$sql = "SELECT {$this->idStr} FROM {$this->tableName} WHERE

{$this->pidStr}='{$pid}' AND {$this->where} ";

$result = $this->db->select($sql);

$temp = array();

foreach ($result as $r)

{

$temp[]=$r["{$this->idStr}"];

}

return $temp;

}

//取得夫id

function getParent($cid)

{

$sql = "SELECT {$this->pidStr} FROM {$this->tableName} WHERE

{$this->idStr}='{$cid}' AND {$this->where} ";

$result = $this->db->select($sql);

//print_r($result);exit();

return $result[0]["{$this->pidStr}"];

}

//取得上级的id

function getPidStr($cid,$pidStr="")

{

$pid=$this->getParent($cid);

$temp = array();

while ($pid!=$this->pid && !empty($pid)) {

$temp[] = $pid;

$pid=$this->getParent($pid);

}

//print_r($temp);

return implode(',',$temp);

}

//取得深度

function getDepth($cid,$depth=0)

{

$pid=$this->getParent($cid);

$depth++;

if( $pid != $this->pid && !empty($pid))

$depth = $this->getDepth($pid,$depth);

return $depth;

}

//建立文件

function make()

{

if(empty($this->createFileName))

$this->createFileName = "{$this->createArrayName}.data.php";

$rootArr = $this->getRootID();

$selectF = "{$this->idStr},{$this->title},{$this->pidStr}";

foreach ($this->appendArr as $app)

{

if(empty($app)) continue;

$selectF .=",{$app}";

}

$sql = "SELECT {$selectF} FROM {$this->tableName} WHERE

{$this->where}";

$result = $this->db->select($sql);

for ($i=0;$i<count($result);$i++)

{

//id值

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['id']='{$result[$i]["{$this->idStr}"]}';";

//标题

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['title']='{$result[$i]["{$this->title}"]}';";

//父id

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pid']='{$result[$i]["{$this->pidStr}"]}';";

//子id

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['cid']='".implode(',',$this->getChildren($result[$i]["$this->idStr"]))."';";

//目录深度

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['depth']='".$this->getDepth($result[$i]["$this->idStr"])."';";

//父id的id串

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pstr']='".$this->getPidStr($result[$i]["$this->idStr"])."';";

//添加的附加属性

foreach ($this->appendArr as $app)

{

if(empty($app)) continue;

$this->tempCode[] =

"${$this->createArrayName}['{$result[$i][$this->idStr]}']['{$app}']='{$result[$i]["{$app}"]}';";

}

}

$this->tempCode[] = "return ${$this->createArrayName};";

$this->tempCode[] = "?>";

//$content = implode("n",$this->tempCode);

//print_r($this->tempCode);

$content = implode("n",$this->tempCode);

//建立文件

$fio=Factory::getBaseClass('FileIO');

if($this->is_utf8) $content = "xEFxBBxBF".$content;

$fio->writeFile($this->createFileName,$content);

return $content ;

}

}

//加载的文件就是为了,数据库连接

//需要数据库有 select 方法

/*

include_once(dirname(dirname(__FILE__))."/config/config.inc.php");

include_once(CLASSES_PATH."factryObject.class.php");

$db = factryObject::getDB('indexPush');

$c = new treeCache($db);

$c->make();

//exit();

//做分析

include_once("treeCache.data.php");

$treeCache=isset($treeCache) ? $treeCache : array();

$rootStr = isset($treeCache['root']) ? $treeCache['root'] : "";

echo parseTree($treeCache,$rootStr);

function parseTree($treeCache,$rootStr)

{

$tempStr = "";

$temp = explode(',',$rootStr);

foreach ($temp AS $cid)

{

$info = $treeCache[$cid];

$cidStr = $info['cid'];

$tempStr .= str_repeat('-',($info['depth']-1)*3);

$tempStr.=$info['title'];

if(empty($info['pid']))

{

//附加操作

}

$tempStr .= "<br/>";

if(!empty($info['cid']))

$tempStr .=parseTree($treeCache,$info['cid']);

}

return $tempStr;

}

*/

?>

这个类是改善过的,当初做这个的适合,只能是数字的作为数组下标,这次支持字母了

另外就是关于解析

view plaincopy to clipboardprint?

<?php

class parseTree

{

var $ads_type_file = "";

var $isX = false;

var $rowSize=2;

function parseTree()

{

$this->ads_type_file = CACHE_PATH."ads_type_arr.data.php";

$this->ads_city_file = CACHE_PATH."ads_city_arr.data.php";

}

function make_ads_type()

{

$db = Factory::getDB("ads_type");

$tree =Factory::getItemClass('treeCache');

$tree->set($db);

$tree->tableName=$db->tableName;

$tree->pidStr ="ads_type_pid";

$tree->idStr = "ads_type_id";

$tree->title = "ads_type_name";

$tree->createArrayName ="ads_type_arr";

$tree->where = " ads_type_state=1 ORDER BY ads_type_id DESC ";

$tree->appendArr = array("ads_type_info");

$tree->createFileName = $this->ads_type_file;

$tree->is_utf8 = true;

return $tree->make();

}

function get_ads_type_str()

{

$temp_arr = $this->get_ads_type_arr();

$treeArr = emptyempty($temp_arr) ? array() : $temp_arr;

$rootStr = isset($temp_arr['root']) ? $temp_arr['root'] : "";

$show_content = $this->__parseTree($treeArr,$rootStr,'pares_type_link');

return $show_content;

}

function get_ads_type_arr()

{

return is_file($this->ads_type_file) ? require($this->ads_type_file) : array();

}

function pares_type_link($info)

{

$class_name = "ads_type";

$tempStr = "[<a href="?c={$class_name}&m=add&ads_type_pid={$info[" href="?c={$class_name}&m=add&ads_type_pid={$info["id']}'>子-添加</a>]";

$tempStr .="[<a href="?c={$class_name}&m=edit&ads_type_id={$info[" href="?c={$class_name}&m=edit&ads_type_id={$info["id']}'>编辑</a>]";

$tempStr .="[<a href="?c={$class_name}&m=del&ads_type_id={$info[" href="?c={$class_name}&m=del&ads_type_id={$info["id']}'>删除</a>]";

return $tempStr;

}

//根据提供的类别号取得类别数组

function get_type_arr($type_no=0)

{

$temp_arr = $this->get_ads_type_arr();

$rootStr = $type_no==0 ? (isset($temp_arr['root'])?$temp_arr['root'] : "") : (isset($temp_arr[$type_no]['cid'])?$temp_arr[$type_no]['cid']:"");

$temp = explode(',',$rootStr);

$return_temp = array();

foreach($temp as $cid)

{

if(isset($temp_arr[$cid])) $return_temp[$temp_arr[$cid]['id']]=$temp_arr[$cid]['title'];

}

return $return_temp;

}

function make_ads_city()

{

$db = Factory::getDB("ads_city");

$tree =Factory::getItemClass('treeCache');

$tree->set($db);

$tree->tableName=$db->tableName;

$tree->pidStr ="ads_city_pid";

$tree->idStr = "ads_city_no";

$tree->title = "ads_city_name";

$tree->createArrayName ="ads_city_arr";

$tree->where = " ads_city_state=1 ORDER BY ads_city_no DESC ";

$tree->appendArr = array("ads_city_info");

$tree->createFileName = $this->ads_city_file;

$tree->is_utf8 = true;

return $tree->make();

}

function get_ads_city_arr()

{

return is_file($this->ads_city_file) ? require($this->ads_city_file) : array();

}

function get_ads_city_str()

{

$temp_arr = $this->get_ads_city_arr();

$treeArr = emptyempty($temp_arr) ? array() : $temp_arr;

$rootStr = isset($temp_arr['root']) ? $temp_arr['root'] : "";

$show_content = $this->__parseTree($treeArr,$rootStr,'pares_city_link');

return $show_content;

}

function pares_city_link($info)

{

$class_name = "ads_city";

$tempStr = "[<a href="?c={$class_name}&m=add&ads_city_pid={$info[" href="?c={$class_name}&m=add&ads_city_pid={$info["id']}'>子-添加</a>]";

$tempStr .="[<a href="?c={$class_name}&m=edit&ads_city_no={$info[" href="?c={$class_name}&m=edit&ads_city_no={$info["id']}'>编辑</a>]";

$tempStr .="[<a href="?c={$class_name}&m=del&ads_city_no={$info[" href="?c={$class_name}&m=del&ads_city_no={$info["id']}'>删除</a>]";

return $tempStr;

}

//根据提供的城市号取得城市数组

function get_city_arr($city_no=0)

{

$temp_arr = $this->get_ads_city_arr();

$rootStr = $city_no==0 ? (isset($temp_arr['root'])?$temp_arr['root'] : "") : (isset($temp_arr[$city_no])?$temp_arr[$city_no]:"");

$temp = explode(',',$rootStr);

$return_temp = array();

foreach($temp as $cid)

{

if(isset($temp_arr[$cid])) $return_temp[$temp_arr[$cid]['id']]=$temp_arr[$cid]['title'];

}

return $return_temp;

}

function __parseTree($treeCache,$rootStr,$fuc_str)

{

$tempStr = "";

$temp = explode(',',$rootStr);

if(emptyempty($temp)) return "";

$this->layer=0;

foreach ($temp AS $cid)

{

if(isset($treeCache[$cid]))

{

$info = $treeCache[$cid];

$cidStr = $info['cid'];

//如果下面有子id

if($info["cid"]!="")

{

$tempStr .="<div >";

$tempStr .= str_repeat(' ',($info['depth']-1)*3);

if($info["cid"]!="")

{

//$tempStr .="<img src="http://www.jb51.netimages/arrow.jpg" src="images/arrow.jpg" onClick='javascript:ShowMenu("l_{$info['id']}");' id='pic_l_{$info['id']}'>";

}

//$tempStr .=">";

$tempStr.=$info['title'];

$tempStr .=$this->{$fuc_str}($info);

$tempStr .="</div>";

$tempStr .="<div id='l_{$info['id']}' >";

$tempStr .= $this->__parseTree($treeCache,$info['cid'],$fuc_str);

$tempStr .="</div>";

}else{

$this->layer++;

$tempStr .= str_repeat(' ',($info['depth']-1)*3);

$tempStr.=$info['title'];

$tempStr .=$this->{$fuc_str}($info);

if($this->isX==true)

{

if($this->layer % $this->rowSize ==0)

$tempStr .= "<br/>";

else

$tempStr .= " ";

}else{

$tempStr .= "<br/>";

}

}

}

}

return $tempStr;

}

}

?>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新php教程学习
热门php教程学习
编程开发子分类