?
?
class ?CtbClass ?{ ?
?
?? ?? ?? ??var ?$file; ? ? ? ? ?
?? ?? ?? ??var ?$index; ? ? ?
?
? ? ? ?//建立一个文件并写入输入 ?
?? ?? ?? ??function ?null_write($new) ?
?? ?? ?? ??{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$new); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?添加数据记录到文件末端 ?
?? ?? ?? ??function ?add_write($new) ?{ ? ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"a"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$new); ? ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ? ?
?? ?? ?? ??// ?配合readfile()的返回一起使用,把一行数据转换为一维数组 ?
?? ?? ?? ??function ?make_array($line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$array ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$array; ?
?? ?? ?? ??} ?
?? ?? ?? ?? ?
?? ?? ?? ??//把为一维数组转换一行数据 ?
?? ?? ?? ??function ?join_array($line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$array ?= ?join("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$array; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?返回数据文件的总行数 ?
?? ?? ?? ??function ?getlines() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=file($this->file); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?count($f); ? ? ? ? ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?返回下一行的数据记录(备用) ?
?? ?? ?? ??function ?next_line() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$this->index=$this->index++; ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?$this->get(); ? ? ? ? ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?返回上一行的数据记录(备用) ?
?? ?? ?? ??function ?prev_line() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$this->index=$this->index--; ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?$this->get(); ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?返回当前行的数据记录数据较小 ?
?? ?? ?? ??function ?get() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for($i=0;$i<=$this->index;$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$rec=fgets($f,1024); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$rec); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?返回当前行的数据记录数据较大 ?
?? ?? ?? ??function ?get_big_file() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for($i=0;$i<=$this->index;$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$rec=fgets($f,1024*5); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$rec); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?打开数据文件---以一维数组返回文件内容 ?
?? ?? ?? ??function ?read_file() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?打开数据文件---以二维数组返回文件内容 ?
?? ?? ?? ??function ?openFile() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$f ?=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$lines ?= ?array(); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??foreach ?($f ?as ?$rawline) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpline ?= ?explode("/x0E",$rawline); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??array_push($lines, ?$tmpline); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?传入一个数组,合并成一行数据,重写整个文件 ?
?? ?? ?? ??function ?overwrite($array){ ?
?? ?? ?? ?? ?? ?? ?? ??$newline ?= ?implode("/x0E",$array); ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newline); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
? ? ?
?? ?? ?? ??// ?添加一行数据记录到文件末端 ?
?? ?? ?? ??function ?add_line($array,$check_n=1) ?{ ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$s=implode("/x0E",$array); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"a"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$s); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??if ?($check_n==1) ?fputs($f,"/n"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ? ? ? ? ?
?
?? ?? ?? ??// ?插入一行数据记录到文件最前面 ?
?? ?? ?? ??function ?insert_line($array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?implode("/x0E",$array); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?更新所有符合条件的数据记录,适用于每行字节数据较大的情况 ?
?? ?? ?? ??function ?update($column,$query_string,$update_array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$update_string ?= ?implode("/x0E",$update_array); ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$fc=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$list ?= ?explode("/x0E",$fc[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($list[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.chop($fc[$i])."/n"; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.$update_string; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?更新所有符合条件的数据记录,适用于每行字节数据较小的情况 ?
?? ?? ?? ??function ?update2($column,$query_string,$update_array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newline ?= ?implode("/x0E",$update_array); ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpLine ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($tmpLine[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$newline; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?删除所有符合条件的数据记录,适用于每行字节数据较大的情况 ?
?? ?? ?? ??function ?delete($column,$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$fc=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$list ?= ?explode("/x0E",$fc[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($list[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.chop($fc[$i])."/n"; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ? ? ? ? ?
?
?? ?? ?? ??// ?删除所有符合条件的数据记录,适用于每行字节数据较小的情况 ?
?? ?? ?? ??function ?delete2($column,$query_string){ ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpLine ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($tmpLine[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
? ? ? ?//取得一个文件里某个字段的最大值 ?
?? ?? ?? ??function ?get_max_value($column) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tlines ?= ?file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i<=count($tlines);$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$tlines[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$get_value[]=$line[$column]; ?
?? ?? ?? ?? ?? ?? ?? ??} ?
? ? ? ? ? ? ? ?$get_max_value ?= ?max($get_value); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$get_max_value; ?
?? ?? ?? ??} ?
?
?
?? ?? ?? ??// ?根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据 ?
?? ?? ?? ??function ?select($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->openfile(); ?
?? ?? ?? ?? ?? ?? ?? ??$lines ?= ?array(); ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??array_push($lines, ?$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?功能与function ?select()一样,速度可能略有提升 ?
?? ?? ?? ??function ?select2($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$lines[]=$tmpLine; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据 ?
?? ?? ?? ??function ?select_line($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ? ? ? ? ? ? ? ?return ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??break; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?select ?next/prev ?line(next_prev ?==> ?1/next, ?2/prev) ?by ?cx ?
?? ?? ?? ??function ?select_next_prev_line($column, ?$query_string, ?$next_prev) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ??$line_key_end ?= ?count($tline) ?- ?1; ?
?? ?? ?? ?? ?? ?? ?? ??$line_key ?= ?-1; ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key++; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($next_prev ?== ?1) ?{ ? ?// ?next? ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line_key ?== ?0) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key_up ?= ?$line_key ?- ?1; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?$up_line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$up_line ?= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?elseif ?($next_prev ?== ?2) ?{ ? ?// ?prev? ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line_key ?== ?$line_key_end) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key_down ?= ?$line_key ?+ ?1; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??break; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$down_line ?= ?$this->make_array($tline[$line_key_down]); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$down_line; ?
?? ?? ?? ??} ?
?
?
?
}??
?
?? ?? ?? ??var ?$file; ? ? ? ? ?
?? ?? ?? ??var ?$index; ? ? ?
?
? ? ? ?//建立一个文件并写入输入 ?
?? ?? ?? ??function ?null_write($new) ?
?? ?? ?? ??{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$new); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?添加数据记录到文件末端 ?
?? ?? ?? ??function ?add_write($new) ?{ ? ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"a"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$new); ? ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ? ?
?? ?? ?? ??// ?配合readfile()的返回一起使用,把一行数据转换为一维数组 ?
?? ?? ?? ??function ?make_array($line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$array ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$array; ?
?? ?? ?? ??} ?
?? ?? ?? ?? ?
?? ?? ?? ??//把为一维数组转换一行数据 ?
?? ?? ?? ??function ?join_array($line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$array ?= ?join("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$array; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?返回数据文件的总行数 ?
?? ?? ?? ??function ?getlines() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=file($this->file); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?count($f); ? ? ? ? ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?返回下一行的数据记录(备用) ?
?? ?? ?? ??function ?next_line() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$this->index=$this->index++; ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?$this->get(); ? ? ? ? ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?返回上一行的数据记录(备用) ?
?? ?? ?? ??function ?prev_line() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$this->index=$this->index--; ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??return ?$this->get(); ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?返回当前行的数据记录数据较小 ?
?? ?? ?? ??function ?get() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for($i=0;$i<=$this->index;$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$rec=fgets($f,1024); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$rec); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?返回当前行的数据记录数据较大 ?
?? ?? ?? ??function ?get_big_file() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for($i=0;$i<=$this->index;$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$rec=fgets($f,1024*5); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$rec); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ? ? ? ? ?
?? ?? ?? ??} ? ? ?
?? ?? ?? ??// ?打开数据文件---以一维数组返回文件内容 ?
?? ?? ?? ??function ?read_file() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??return ?$line; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?打开数据文件---以二维数组返回文件内容 ?
?? ?? ?? ??function ?openFile() ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$f ?=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$lines ?= ?array(); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??foreach ?($f ?as ?$rawline) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpline ?= ?explode("/x0E",$rawline); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??array_push($lines, ?$tmpline); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?传入一个数组,合并成一行数据,重写整个文件 ?
?? ?? ?? ??function ?overwrite($array){ ?
?? ?? ?? ?? ?? ?? ?? ??$newline ?= ?implode("/x0E",$array); ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newline); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
? ? ?
?? ?? ?? ??// ?添加一行数据记录到文件末端 ?
?? ?? ?? ??function ?add_line($array,$check_n=1) ?{ ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$s=implode("/x0E",$array); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"a"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$s); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??if ?($check_n==1) ?fputs($f,"/n"); ? ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ? ?
?? ?? ?? ??} ? ? ? ? ?
?
?? ?? ?? ??// ?插入一行数据记录到文件最前面 ?
?? ?? ?? ??function ?insert_line($array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?implode("/x0E",$array); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?更新所有符合条件的数据记录,适用于每行字节数据较大的情况 ?
?? ?? ?? ??function ?update($column,$query_string,$update_array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$update_string ?= ?implode("/x0E",$update_array); ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$fc=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$list ?= ?explode("/x0E",$fc[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($list[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.chop($fc[$i])."/n"; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.$update_string; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?更新所有符合条件的数据记录,适用于每行字节数据较小的情况 ?
?? ?? ?? ??function ?update2($column,$query_string,$update_array) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newline ?= ?implode("/x0E",$update_array); ? ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpLine ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($tmpLine[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$newline; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?删除所有符合条件的数据记录,适用于每行字节数据较大的情况 ?
?? ?? ?? ??function ?delete($column,$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?? ?? ?? ?? ?
?? ?? ?? ?? ?? ?? ?? ??$fc=file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$list ?= ?explode("/x0E",$fc[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($list[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?$newfile.chop($fc[$i])."/n"; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f=fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ? ? ? ? ?
?
?? ?? ?? ??// ?删除所有符合条件的数据记录,适用于每行字节数据较小的情况 ?
?? ?? ?? ??function ?delete2($column,$query_string){ ? ? ?
?? ?? ?? ?? ?? ?? ?? ??$newfile ?= ?""; ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"r"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_SH); ?
?? ?? ?? ?? ?? ?? ?? ??while ?($line ?= ?fgets($f,1024)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tmpLine ?= ?explode("/x0E",$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($tmpLine[$column] ?!= ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$newfile ?.= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ?? ?? ?? ?? ??$f ?= ?fopen($this->file,"w"); ?
?? ?? ?? ?? ?? ?? ?? ??flock($f,LOCK_EX); ?
?? ?? ?? ?? ?? ?? ?? ??fputs($f,$newfile); ?
?? ?? ?? ?? ?? ?? ?? ??fclose($f); ?
?? ?? ?? ??} ?
?
? ? ? ?//取得一个文件里某个字段的最大值 ?
?? ?? ?? ??function ?get_max_value($column) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tlines ?= ?file($this->file); ?
?? ?? ?? ?? ?? ?? ?? ??for ?($i=0;$i<=count($tlines);$i++) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line=explode("/x0E",$tlines[$i]); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$get_value[]=$line[$column]; ?
?? ?? ?? ?? ?? ?? ?? ??} ?
? ? ? ? ? ? ? ?$get_max_value ?= ?max($get_value); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$get_max_value; ?
?? ?? ?? ??} ?
?
?
?? ?? ?? ??// ?根据数据文件的某个字段是否包含$query_string进行查询,以二维数组返回所有符合条件的数据 ?
?? ?? ?? ??function ?select($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->openfile(); ?
?? ?? ?? ?? ?? ?? ?? ??$lines ?= ?array(); ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$line) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??array_push($lines, ?$line); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?功能与function ?select()一样,速度可能略有提升 ?
?? ?? ?? ??function ?select2($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??if ?(file_exists($this->file)) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$lines[]=$tmpLine; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?
?? ?? ?? ?? ?? ?? ?? ??return ?$lines; ?
?? ?? ?? ??} ?
?
?? ?? ?? ??// ?根据数据文件的某个字段是否包含$query_string进行查询,以一维数组返回第一个符合条件的数据 ?
?? ?? ?? ??function ?select_line($column, ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ? ? ? ? ? ? ? ?return ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??break; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ??} ?
?? ?? ?? ??// ?select ?next/prev ?line(next_prev ?==> ?1/next, ?2/prev) ?by ?cx ?
?? ?? ?? ??function ?select_next_prev_line($column, ?$query_string, ?$next_prev) ?{ ?
?? ?? ?? ?? ?? ?? ?? ??$tline ?= ?$this->read_file(); ?
?? ?? ?? ?? ?? ?? ?? ??$line_key_end ?= ?count($tline) ?- ?1; ?
?? ?? ?? ?? ?? ?? ?? ??$line_key ?= ?-1; ?
?? ?? ?? ?? ?? ?? ?? ??foreach ?($tline ?as ?$tmpLine) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key++; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line ?= ?$this->make_array($tmpLine); ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($next_prev ?== ?1) ?{ ? ?// ?next? ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line_key ?== ?0) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key_up ?= ?$line_key ?- ?1; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?$up_line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$up_line ?= ?$line; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?elseif ?($next_prev ?== ?2) ?{ ? ?// ?prev? ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line[$column] ?== ?$query_string) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??if ?($line_key ?== ?$line_key_end) ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??$line_key_down ?= ?$line_key ?+ ?1; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??break; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?else ?{ ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??return ?0; ?
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??} ?
?? ?? ?? ?? ?? ?? ?? ??$down_line ?= ?$this->make_array($tline[$line_key_down]); ?
?? ?? ?? ?? ?? ?? ?? ??return ?$down_line; ?
?? ?? ?? ??} ?
?
?
?
}??