PHP infinite cache class extension_PHP tutorial

WBOY
Release: 2016-07-21 15:47:32
Original
5862 people have browsed it

Copy code The code is as follows:

/**
* Function: Establish category cache based on conditions to reduce category usage
* Created date: Thu May 31 15:55:11 CST 2007
* Last updated:
* Author: sanshi
*/

class treeCache
{
var $tableName = "index_category"; //table name
var $where = "1"; //where condition
var $pidStr ="i_c_pid"; //pid field name
var $tempCode = array(); //array of generated files
var $pid = '0'; //Initial value of pid
var $db; //Database handle
var $idStr="i_c_id"; //The obtained data id
var $title = " i_c_cn"; //Name field
var $createArrayName = "treeCache"; //The name of the created array
var $createFileName =""; //The name of the created file
var $appendArr = array() ; //Additional attributes, the field name needs to correspond to the name in the data
var $is_utf8 = false;
function treeCache()
{
}
function set($db)
{
$this->db = $db;
$this->tempCode[] = "}
//Get all level 1
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;
}
//Get the child 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;
}
//Get husband 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}"];
}
//Get the superior's 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);
}
//Get depth
function getDepth($cid,$depth=0)
{
$pid=$this->getParent($cid) ;
$depth++;
if( $pid != $this->pid && !emptyempty($pid))
$depth = $this->getDepth($pid,$depth);
return $depth;
}
//Create file
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{
//id value
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this- >idStr]}']['id']='{$result[$i]["{$this->idStr}"]}';";
//Title
$this- >tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['title']='{$result[ $i]["{$this->title}"]}';";
//parent id
$this->tempCode[] =
"${$this-> createArrayName}['{$result[$i][$this->idStr]}']['pid']='{$result[$i]["{$this->pidStr}"]}' ;";
//Subid
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this-> idStr]}']['cid']='".implode(',',$this->getChildren($result[$i]["$this->idStr"]))."';" ;
//Directory depth
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr] }']['depth']='".$this->getDepth($result[$i]["$this->idStr"])."';";
//The parent id id string
$this->tempCode[] =
"${$this->createArrayName}['{$result[$i][$this->idStr]}']['pstr ']='".$this->getPidStr($result[$i]["$this->idStr"])."';";
//Added additional attributes
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);
//Create file
$fio=Factory::getBaseClass('FileIO') ;
if($this->is_utf8) $content = "xEFxBBxBF".$content;
$fio->writeFile($this->createFileName,$content);
return $content ;
}
}
//The file to be loaded is for database connection
//The database needs to have a select method
/*
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();

//Do analysis
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']))
{
//Additional operations
}
$tempStr .= "
";
if(!empty($info[' cid']))
$tempStr .=parseTree($treeCache,$info['cid']);
}
return $tempStr;
}
*/
? >
/**
* Function: Establish category cache based on conditions to reduce category usage
* Created date: Thu May 31 15:55:11 CST 2007
* Last updated:
* Author: sanshi
*/

class treeCache
{
var $tableName = "index_category"; //Table name
var $where = "1"; //where condition
var $pidStr ="i_c_pid"; //pid field name
var $tempCode = array(); //array of generated file
var $pid = '0'; //Initial value of pid
var $db; //Database handle
var $idStr="i_c_id"; //The obtained data id
var $title = "i_c_cn "; //Name field
var $createArrayName = "treeCache"; //The name of the created array
var $createFileName =""; //The name of the created file
var $appendArr = array(); //Additional attributes, the field name needs to correspond to the name in the data
var $is_utf8 = false;
function treeCache()
{
}
function set($db)
{
$this->db = $db;
$this->tempCode[] = "}
//Get all level 1
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;
}
//Get the child 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;
}
//Get husband 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}"];
}
//Get the superior's 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);
}
//Get the depth
function getDepth($cid,$depth=0)
{
$pid=$this->getParent($cid);
$depth++;
if( $pid != $this->pid && !empty($pid))
$depth = $this->getDepth($pid,$depth);
return $depth;
}
//Create file
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{
//id value
$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 .= "
";
if(!empty($info['cid']))
$tempStr .=parseTree($treeCache,$info['cid']);
}
return $tempStr;
}
*/
?>

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

另外就是关于解析

view plaincopy to clipboardprint?
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 = "[子-添加]";
$tempStr .="[编辑]";
$tempStr .="[删除]";
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 = "[子-添加]";
$tempStr .="[编辑]";
$tempStr .="[删除]";
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 .="
";
$tempStr .= str_repeat(' ',($info['depth']-1)*3);
if($info["cid"]!="")
{
//$tempStr .="";
}
//$tempStr .=">";
$tempStr.=$info['title'];
$tempStr .=$this->{$fuc_str}($info);
$tempStr .="
";
$tempStr .="
";
$tempStr .= $this->__parseTree($treeCache,$info['cid'],$fuc_str);
$tempStr .="
";
}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 .= "
";
else
$tempStr .= " ";
}else{
$tempStr .= "
";
}
}
}
}
return $tempStr;
}
}
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/319904.htmlTechArticle复制代码 代码如下: ?php /** * 功能: 根据条件建立分类缓存减少类别使用 * 创建日期:Thu May 31 15:55:11 CST 2007 * 最后更新: * 作者: sanshi sanshi08...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template