Volist标签 bug改善
mod 有点小问题,第103行
见下面代码<?php <br />
// +----------------------------------------------------------------------<br>
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]<br>
// +----------------------------------------------------------------------<br>
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.<br>
// +----------------------------------------------------------------------<br>
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )<br>
// +----------------------------------------------------------------------<br>
// | Author: liu21st <liu21st><br>
// +----------------------------------------------------------------------<br>
<br>
defined('THINK_PATH') or exit();<br>
/**<br>
* CX标签库解析类<br>
* @category Think<br>
* @package Think<br>
* @subpackage Driver.Taglib<br>
* @author liu21st <liu21st><br>
*/<br>
class TagLibCx extends TagLib {<br>
<br>
// 标签定义<br>
protected $tags = array(<br>
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次<br>
'php' => array(),<br>
'volist' => array('attr'=>'name,id,offset,length,key,mod','level'=>3,'alias'=>'iterate'),<br>
'foreach' => array('attr'=>'name,item,key','level'=>3),<br>
'if' => array('attr'=>'condition','level'=>2),<br>
'elseif' => array('attr'=>'condition','close'=>0),<br>
'else' => array('attr'=>'','close'=>0),<br>
'switch' => array('attr'=>'name','level'=>2),<br>
'case' => array('attr'=>'value,break'),<br>
'default' => array('attr'=>'','close'=>0),<br>
'compare' => array('attr'=>'name,value,type','level'=>3,'alias'=>'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'),<br>
'range' => array('attr'=>'name,value,type','level'=>3,'alias'=>'in,notin,between,notbetween'),<br>
'empty' => array('attr'=>'name','level'=>3),<br>
'notempty' => array('attr'=>'name','level'=>3),<br>
'present' => array('attr'=>'name','level'=>3),<br>
'notpresent'=> array('attr'=>'name','level'=>3),<br>
'defined' => array('attr'=>'name','level'=>3),<br>
'notdefined'=> array('attr'=>'name','level'=>3),<br>
'import' => array('attr'=>'file,href,type,value,basepath','close'=>0,'alias'=>'load,css,js'),<br>
'assign' => array('attr'=>'name,value','close'=>0),<br>
'define' => array('attr'=>'name,value','close'=>0),<br>
'for' => array('attr'=>'start,end,name,comparison,step', 'level'=>3),<br>
);<br>
<br>
/**<br>
* php标签解析<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _php($attr,$content) {<br>
$parseStr = '<?php '.$content.' ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* volist标签解析 循环输出数据集<br>
* 格式:<br>
* <volist><br>
* {user.username}<br>
* {user.email}<br>
* </volist><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string|void<br>
*/<br>
public function _volist($attr,$content) {<br>
static $_iterateParseCache = array();<br>
//如果已经解析过,则直接返回变量值<br>
$cacheIterateId = md5($attr.$content);<br>
if(isset($_iterateParseCache[$cacheIterateId]))<br>
return $_iterateParseCache[$cacheIterateId];<br>
$tag = $this->parseXmlAttr($attr,'volist');<br>
$name = $tag['name'];<br>
$id = $tag['id'];<br>
$empty = isset($tag['empty'])?$tag['empty']:'';<br>
$key = !empty($tag['key'])?$tag['key']:'i';<br>
$mod = isset($tag['mod'])?$tag['mod']:'2';<br>
// 允许使用函数设定数据集 <volist>{$vo.name}</volist><br>
$parseStr = '<?php ';<br />
if(0===strpos($name,':')) {<br>
$parseStr .= '$_result='.substr($name,1).';';<br>
$name = '$_result';<br>
}else{<br>
$name = $this->autoBuildVar($name);<br>
}<br>
$parseStr .= 'if(is_array('.$name.')): $'.$key.' = 0;';<br>
if(isset($tag['length']) && '' !=$tag['length'] ) {<br>
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].','.$tag['length'].',true);';<br>
}elseif(isset($tag['offset']) && '' !=$tag['offset']){<br>
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].',null,true);';<br>
}else{<br>
$parseStr .= ' $__LIST__ = '.$name.';';<br>
}<br>
$parseStr .= 'if( count($__LIST__)==0 ) : echo "'.$empty.'" ;';<br>
$parseStr .= 'else: ';<br>
$parseStr .= 'foreach($__LIST__ as $key=>$'.$id.'): ';<br>
//改善后<br>
$parseStr .= '++$'.$key.';';<br>
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';<br>
$parseStr .= '?>';<br>
/*改善前<br>
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';<br>
$parseStr .= '++$'.$key.';?>';*/<br>
<br>
$parseStr .= $this->tpl->parse($content);<br>
$parseStr .= '<?php endforeach; endif; else: echo "'.$empty.'" ;endif; ?>';<br>
$_iterateParseCache[$cacheIterateId] = $parseStr;<br>
<br>
if(!empty($parseStr)) {<br>
return $parseStr;<br>
}<br>
return ;<br>
}<br>
<br>
/**<br>
* foreach标签解析 循环输出数据集<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string|void<br>
*/<br>
public function _foreach($attr,$content) {<br>
static $_iterateParseCache = array();<br>
//如果已经解析过,则直接返回变量值<br>
$cacheIterateId = md5($attr.$content);<br>
if(isset($_iterateParseCache[$cacheIterateId]))<br>
return $_iterateParseCache[$cacheIterateId];<br>
$tag = $this->parseXmlAttr($attr,'foreach');<br>
$name = $tag['name'];<br>
$item = $tag['item'];<br>
$key = !empty($tag['key'])?$tag['key']:'key';<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';<br>
$parseStr .= $this->tpl->parse($content);<br>
$parseStr .= '<?php endforeach; endif; ?>';<br>
$_iterateParseCache[$cacheIterateId] = $parseStr;<br>
if(!empty($parseStr)) {<br>
return $parseStr;<br>
}<br>
return ;<br>
}<br>
<br>
/**<br>
* if标签解析<br>
* 格式:<br>
* <if><br>
* <elseif></elseif><br>
* <else></else><br>
* </if><br>
* 表达式支持 eq neq gt egt lt elt == > >=
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _if($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'if');<br>
$condition = $this->parseCondition($tag['condition']);<br>
$parseStr = '<?php if('.$condition.'): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* else标签解析<br>
* 格式:见if标签<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _elseif($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'elseif');<br>
$condition = $this->parseCondition($tag['condition']);<br>
$parseStr = '<?php elseif('.$condition.'): ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* else标签解析<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @return string<br>
*/<br>
public function _else($attr) {<br>
$parseStr = '<?php else: ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* switch标签解析<br>
* 格式:<br>
* <switch><br>
* <case>1</case><br>
* <case>2</case><br>
* <default></default>other<br>
* </switch><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _switch($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'switch');<br>
$name = $tag['name'];<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
$parseStr = '<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* case标签解析 需要配合switch才有效<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _case($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'case');<br>
$value = $tag['value'];<br>
if('$' == substr($value,0,1)) {<br>
$varArray = explode('|',$value);<br>
$value = array_shift($varArray);<br>
$value = $this->autoBuildVar(substr($value,1));<br>
if(count($varArray)>0)<br>
$value = $this->tpl->parseVarFunction($value,$varArray);<br>
$value = 'case '.$value.': ';<br>
}elseif(strpos($value,'|')){<br>
$values = explode('|',$value);<br>
$value = '';<br>
foreach ($values as $val){<br>
$value .= 'case "'.addslashes($val).'": ';<br>
}<br>
}else{<br>
$value = 'case "'.$value.'": ';<br>
}<br>
$parseStr = '<?php '.$value.' ?>'.$content;<br>
$isBreak = isset($tag['break']) ? $tag['break'] : '';<br>
if('' ==$isBreak || $isBreak) {<br>
$parseStr .= '<?php break;?>';<br>
}<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* default标签解析 需要配合switch才有效<br>
* 使用: <default></default>ddfdf<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _default($attr) {<br>
$parseStr = '<?php default: ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* compare标签解析<br>
* 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq<br>
* 格式: <compare>content</compare><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _compare($attr,$content,$type='eq') {<br>
$tag = $this->parseXmlAttr($attr,'compare');<br>
$name = $tag['name'];<br>
$value = $tag['value'];<br>
$type = isset($tag['type'])?$tag['type']:$type;<br>
$type = $this->parseCondition(' '.$type.' ');<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
if('$' == substr($value,0,1)) {<br>
$value = $this->autoBuildVar(substr($value,1));<br>
}else {<br>
$value = '"'.$value.'"';<br>
}<br>
$parseStr = '<?php if(('.$name.') '.$type.' '.$value.'): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _eq($attr,$content) {<br>
return $this->_compare($attr,$content,'eq');<br>
}<br>
<br>
public function _equal($attr,$content) {<br>
return $this->_compare($attr,$content,'eq');<br>
}<br>
<br>
public function _neq($attr,$content) {<br>
return $this->_compare($attr,$content,'neq');<br>
}<br>
<br>
public function _notequal($attr,$content) {<br>
return $this->_compare($attr,$content,'neq');<br>
}<br>
<br>
public function _gt($attr,$content) {<br>
return $this->_compare($attr,$content,'gt');<br>
}<br>
<br>
public function _lt($attr,$content) {<br>
return $this->_compare($attr,$content,'lt');<br>
}<br>
<br>
public function _egt($attr,$content) {<br>
return $this->_compare($attr,$content,'egt');<br>
}<br>
<br>
public function _elt($attr,$content) {<br>
return $this->_compare($attr,$content,'elt');<br>
}<br>
<br>
public function _heq($attr,$content) {<br>
return $this->_compare($attr,$content,'heq');<br>
}<br>
<br>
public function _nheq($attr,$content) {<br>
return $this->_compare($attr,$content,'nheq');<br>
}<br>
<br>
/**<br>
* range标签解析<br>
* 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外<br>
* 格式: <range>content</range><br>
* example: <range>content</range><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @param string $type 比较类型<br>
* @return string<br>
*/<br>
public function _range($attr,$content,$type='in') {<br>
$tag = $this->parseXmlAttr($attr,'range');<br>
$name = $tag['name'];<br>
$value = $tag['value'];<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
<br>
$type = isset($tag['type'])?$tag['type']:$type;<br>
<br>
if('$' == substr($value,0,1)) {<br>
$value = $this->autoBuildVar(substr($value,1));<br>
$str = 'is_array('.$value.')?'.$value.':explode(\',\','.$value.')';<br>
}else{<br>
$value = '"'.$value.'"';<br>
$str = 'explode(\',\','.$value.')';<br>
}<br>
if($type=='between') {<br>
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'>= $_RANGE_VAR_[0] && '.$name.''.$content.'<?php endif; ?>';<br>
}elseif($type=='notbetween'){<br>
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'<$_RANGE_VAR_[0] || '.$name.'>$_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';<br>
}else{<br>
$fun = ($type == 'in')? 'in_array' : '!in_array';<br>
$parseStr = '<?php if('.$fun.'(('.$name.'), '.$str.')): ?>'.$content.'<?php endif; ?>';<br>
}<br>
return $parseStr;<br>
}<br>
<br>
// range标签的别名 用于in判断<br>
public function _in($attr,$content) {<br>
return $this->_range($attr,$content,'in');<br>
}<br>
<br>
// range标签的别名 用于notin判断<br>
public function _notin($attr,$content) {<br>
return $this->_range($attr,$content,'notin');<br>
}<br>
<br>
public function _between($attr,$content){<br>
return $this->_range($attr,$content,'between');<br>
}<br>
<br>
public function _notbetween($attr,$content){<br>
return $this->_range($attr,$content,'notbetween');<br>
}<br>
<br>
/**<br>
* present标签解析<br>
* 如果某个变量已经设置 则输出内容<br>
* 格式: <present>content</present><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _present($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'present');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(isset('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* notpresent标签解析<br>
* 如果某个变量没有设置,则输出内容<br>
* 格式: <notpresent>content</notpresent><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _notpresent($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'notpresent');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(!isset('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* empty标签解析<br>
* 如果某个变量为empty 则输出内容<br>
* 格式: <empty>content</empty><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _empty($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'empty');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(empty('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _notempty($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'notempty');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(!empty('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* 判断是否已经定义了该常量<br>
* <defined>已定义</defined><br>
* @param <type> $attr<br>
* @param <type> $content<br>
* @return string<br>
*/<br>
public function _defined($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'defined');<br>
$name = $tag['name'];<br>
$parseStr = '<?php if(defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _notdefined($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'_notdefined');<br>
$name = $tag['name'];<br>
$parseStr = '<?php if(!defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* import 标签解析 <import></import> <br>
* <import></import><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @param boolean $isFile 是否文件方式<br>
* @param string $type 类型<br>
* @return string<br>
*/<br>
public function _import($attr,$content,$isFile=false,$type='') {<br>
$tag = $this->parseXmlAttr($attr,'import');<br>
$file = isset($tag['file'])?$tag['file']:$tag['href'];<br>
$parseStr = '';<br>
$endStr = '';<br>
// 判断是否存在加载条件 允许使用函数判断(默认为isset)<br>
if (isset($tag['value'])) {<br>
$varArray = explode('|',$tag['value']);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if (!empty($varArray))<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
else<br>
$name = 'isset('.$name.')';<br>
$parseStr .= '<?php if('.$name.'): ?>';<br>
$endStr = '<?php endif; ?>';<br>
}<br>
if($isFile) {<br>
// 根据文件名后缀自动识别<br>
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):null);<br>
// 文件方式导入<br>
$array = explode(',',$file);<br>
foreach ($array as $val){<br>
if (!$type || isset($reset)) {<br>
$type = $reset = strtolower(substr(strrchr($val, '.'),1));<br>
}<br>
switch($type) {<br>
case 'js':<br>
$parseStr .= '<script></script>';<br>
break;<br>
case 'css':<br>
$parseStr .= '<link>';<br>
break;<br>
case 'php':<br>
$parseStr .= '<?php require_cache("'.$val.'"); ?>';<br>
break;<br>
}<br>
}<br>
}else{<br>
// 命名空间导入模式 默认是js<br>
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):'js');<br>
$basepath = !empty($tag['basepath'])?$tag['basepath']:__ROOT__.'/Public';<br>
// 命名空间方式导入外部文件<br>
$array = explode(',',$file);<br>
foreach ($array as $val){<br>
list($val,$version) = explode('?',$val);<br>
switch($type) {<br>
case 'js':<br>
$parseStr .= '<script></script>';<br>
break;<br>
case 'css':<br>
$parseStr .= '<link>';<br>
break;<br>
case 'php':<br>
$parseStr .= '<?php import("'.$val.'"); ?>';<br>
break;<br>
}<br>
}<br>
}<br>
return $parseStr.$endStr;<br>
}<br>
<br>
// import别名 采用文件方式加载(要使用命名空间必须用import) 例如 <load></load><br>
public function _load($attr,$content) {<br>
return $this->_import($attr,$content,true);<br>
}<br>
<br>
// import别名使用 导入css文件 <css></css><br>
public function _css($attr,$content) {<br>
return $this->_import($attr,$content,true,'css');<br>
}<br>
<br>
// import别名使用 导入js文件 <js></js><br>
public function _js($attr,$content) {<br>
return $this->_import($attr,$content,true,'js');<br>
}<br>
<br>
/**<br>
* assign标签解析<br>
* 在模板中给某个变量赋值 支持变量赋值<br>
* 格式: <assign></assign><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _assign($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'assign');<br>
$name = $this->autoBuildVar($tag['name']);<br>
if('$'==substr($tag['value'],0,1)) {<br>
$value = $this->autoBuildVar(substr($tag['value'],1));<br>
}else{<br>
$value = '\''.$tag['value']. '\'';<br>
}<br>
$parseStr = '<?php '.$name.' = '.$value.'; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* define标签解析<br>
* 在模板中定义常量 支持变量赋值<br>
* 格式: <define></define><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _define($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'define');<br>
$name = '\''.$tag['name']. '\'';<br>
if('$'==substr($tag['value'],0,1)) {<br>
$value = $this->autoBuildVar(substr($tag['value'],1));<br>
}else{<br>
$value = '\''.$tag['value']. '\'';<br>
}<br>
$parseStr = '<?php define('.$name.', '.$value.'); ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* for标签解析<br>
* 格式: <for></for><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _for($attr, $content){<br>
//设置默认值<br>
$start = 0;<br>
$end = 0;<br>
$step = 1;<br>
$comparison = 'lt';<br>
$name = 'i';<br>
$rand = rand(); //添加随机数,防止嵌套变量冲突<br>
//获取属性<br>
foreach ($this->parseXmlAttr($attr, 'for') as $key => $value){<br>
$value = trim($value);<br>
if(':'==substr($value,0,1))<br>
$value = substr($value,1);<br>
elseif('$'==substr($value,0,1))<br>
$value = $this->autoBuildVar(substr($value,1));<br>
switch ($key){<br>
case 'start': <br>
$start = $value; break;<br>
case 'end' : <br>
$end = $value; break;<br>
case 'step': <br>
$step = $value; break;<br>
case 'comparison':<br>
$comparison = $value; break;<br>
case 'name':<br>
$name = $value; break;<br>
}<br>
}<br>
<br>
$parseStr = '<?php $__FOR_START_'.$rand.'__='.$start.';$__FOR_END_'.$rand.'__='.$end.';';<br />
$parseStr .= 'for($'.$name.'=$__FOR_START_'.$rand.'__;'.$this->parseCondition('$'.$name.' '.$comparison.' $__FOR_END_'.$rand.'__').';$'.$name.'+='.$step.'){ ?>';<br>
$parseStr .= $content;<br>
$parseStr .= '<?php } ?>';<br>
return $parseStr;<br>
}<br>
<br>
}</type></type></liu21st></liu21st>
AD:真正免费,域名+虚机+企业邮箱=0元

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

《Go語言程式設計實例:Web開發中的程式碼範例》隨著網路的快速發展,Web開發已成為各行業中不可或缺的一部分。作為一門功能強大且效能優越的程式語言,Go語言在Web開發中越來越受到開發者們的青睞。本文將透過具體的程式碼範例,介紹如何利用Go語言進行Web開發,讓讀者更能理解並運用Go語言來建立自己的Web應用。 1.簡單的HTTP伺服器首先,讓我們從一個

了解Python程式設計的入門程式碼範例Python是一種簡單易學,功能強大的程式語言。對於初學者來說,了解Python程式設計的入門級程式碼範例是非常重要的。本文將為您提供一些具體的程式碼範例,幫助您快速入門。列印HelloWorldprint("HelloWorld")這是Python中最簡單的程式碼範例。 print()函數用於將指定的內容輸出

Java冒泡排序最簡單的程式碼範例冒泡排序是一種常見的排序演算法,它的基本想法是透過相鄰元素的比較和交換來將待排序序列逐步調整為有序序列。以下是一個簡單的Java程式碼範例,示範如何實作冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

PHP變數儲存程式運行期間的值,對於建立動態且互動的WEB應用程式至關重要。本文將深入探討php變量,並透過10個真實的範例展示它們的實際應用。 1.儲存使用者輸入$username=$_POST["username"];$passWord=$_POST["password"];此範例從表單提交中提取使用者名稱和密碼,並將其儲存在變數中以供進一步處理。 2.設定配置值$database_host="localhost";$database_username="username";$database_pa

華為雲端邊緣運算對接指南:Java程式碼範例快速實現介面隨著物聯網技術的快速發展和邊緣運算的興起,越來越多的企業開始關注邊緣運算的應用。華為雲端提供了邊緣運算服務,為企業提供了高可靠的運算資源和便利的開發環境,使得邊緣運算應用更容易實現。本文將介紹如何透過Java程式碼快速實現華為雲端邊緣運算的介面。首先,我們需要準備好開發環境。確保你已經安裝了Java開發工具包(

如何使用PHP編寫庫存管理系統中的庫存分倉管理功能碼庫存管理是許多企業中不可或缺的一部分。對於擁有多個倉庫的企業來說,庫存分倉管理功能尤其重要。透過合理管理和追蹤庫存,企業可以實現不同倉庫之間的庫存調撥,優化營運成本,改善協同效率。本文將介紹如何使用PHP編寫庫存分倉管理功能的程式碼,並為您提供相關的程式碼範例。一、建立資料庫在開始編寫庫存分倉管理功能的程式碼之

標題:從入門到精通:Go語言中常用資料結構的程式碼實作資料結構在程式設計中起著至關重要的作用,它是程式設計的基礎。在Go語言中,有許多常用的資料結構,掌握這些資料結構的實作方式對於成為優秀的程式設計師至關重要。本文將介紹Go語言中常用的資料結構,並給出對應的程式碼範例,幫助讀者從入門到精通這些資料結構。 1.數組(Array)數組是一種基本的資料結構,是一組相同類型

Java選擇排序法程式碼編寫指南及範例選擇排序是一種簡單直觀的排序演算法,其想法是每次從未排序的元素中選擇最小(或最大)的元素進行交換,直到所有元素排序完成。本文將提供選擇排序的程式碼編寫指南,並附上具體的Java範例程式碼。演算法原理選擇排序的基本原理是將待排序數組分為已排序和未排序兩部分,每次從未排序部分選擇最小(或最大)的元素,將其放到已排序部分的末尾。重複上述
