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元

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Ketahui tentang pengaturcaraan Python dengan contoh kod pengenalan Python ialah bahasa pengaturcaraan yang mudah dipelajari tetapi berkuasa. Bagi pemula, adalah sangat penting untuk memahami contoh kod pengenalan pengaturcaraan Python. Artikel ini akan memberikan anda beberapa contoh kod konkrit untuk membantu anda bermula dengan cepat. Cetak HelloWorldprint("HelloWorld") Ini ialah contoh kod paling mudah dalam Python. Fungsi print() digunakan untuk mengeluarkan kandungan yang ditentukan

"Contoh Pengaturcaraan Bahasa Pergi: Contoh Kod dalam Pembangunan Web" Dengan perkembangan pesat Internet, pembangunan Web telah menjadi bahagian yang amat diperlukan dalam pelbagai industri. Sebagai bahasa pengaturcaraan dengan fungsi berkuasa dan prestasi unggul, bahasa Go semakin digemari oleh pembangun dalam pembangunan web. Artikel ini akan memperkenalkan cara menggunakan bahasa Go untuk pembangunan Web melalui contoh kod tertentu, supaya pembaca boleh memahami dengan lebih baik dan menggunakan bahasa Go untuk membina aplikasi Web mereka sendiri. 1. Pelayan HTTP Mudah Mula-mula, mari kita mulakan dengan a

Contoh kod paling ringkas bagi jenis gelembung Java ialah algoritma pengisihan biasa. Idea asasnya ialah melaraskan urutan secara beransur-ansur ke dalam urutan tersusun melalui perbandingan dan pertukaran elemen bersebelahan. Berikut ialah contoh kod Java ringkas yang menunjukkan cara melaksanakan isihan gelembung: publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

Pembolehubah PHP menyimpan nilai semasa runtime program dan sangat penting untuk membina aplikasi WEB yang dinamik dan interaktif. Artikel ini melihat secara mendalam pembolehubah PHP dan menunjukkannya dalam tindakan dengan 10 contoh kehidupan sebenar. 1. Simpan input pengguna $nama pengguna=$_POST["nama pengguna"];$passWord=$_POST["kata laluan"] Contoh ini mengekstrak nama pengguna dan kata laluan daripada penyerahan borang dan menyimpannya dalam pembolehubah untuk pemprosesan selanjutnya. 2. Tetapkan nilai konfigurasi $database_host="localhost";$database_username="username";$database_pa

Tajuk: Dari Permulaan hingga Penguasaan: Pelaksanaan Kod Struktur Data Yang Biasa Digunakan dalam Bahasa Go Struktur data memainkan peranan penting dalam pengaturcaraan dan merupakan asas pengaturcaraan. Dalam bahasa Go, terdapat banyak struktur data yang biasa digunakan, dan menguasai pelaksanaan struktur data ini adalah penting untuk menjadi seorang pengaturcara yang baik. Artikel ini akan memperkenalkan struktur data yang biasa digunakan dalam bahasa Go dan memberikan contoh kod yang sepadan untuk membantu pembaca daripada mula menjadi mahir dalam struktur data ini. 1. Array Array ialah struktur data asas, kumpulan daripada jenis yang sama

Panduan Sambungan Pengkomputeran Tepi Awan Huawei: Contoh Kod Java untuk Melaksanakan Antara Muka Dengan Pantas Dengan perkembangan pesat teknologi IoT dan peningkatan pengkomputeran tepi, semakin banyak perusahaan mula memberi perhatian kepada aplikasi pengkomputeran tepi. Huawei Cloud menyediakan perkhidmatan pengkomputeran edge, menyediakan perusahaan dengan sumber pengkomputeran yang sangat boleh dipercayai dan persekitaran pembangunan yang mudah, menjadikan aplikasi pengkomputeran tepi lebih mudah untuk dilaksanakan. Artikel ini akan memperkenalkan cara untuk melaksanakan antara muka pengkomputeran tepi Awan Huawei dengan cepat melalui kod Java. Pertama, kita perlu menyediakan persekitaran pembangunan. Pastikan anda memasang Java Development Kit (

Cara menggunakan PHP untuk menulis kod fungsi pengurusan inventori dalam sistem pengurusan inventori adalah bahagian yang amat diperlukan dalam banyak perusahaan. Bagi syarikat yang mempunyai berbilang gudang, fungsi pengurusan inventori amat penting. Dengan mengurus dan menjejak inventori dengan betul, syarikat boleh memperuntukkan inventori antara gudang yang berbeza, mengoptimumkan kos operasi dan meningkatkan kecekapan kerjasama. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis kod bagi fungsi pengurusan gudang inventori dan memberikan anda contoh kod yang berkaitan. 1. Wujudkan pangkalan data sebelum mula menulis kod untuk fungsi pengurusan gudang inventori.

Panduan Menulis Kod Kaedah Isih Pemilihan Java dan Contoh Isihan pemilihan ialah algoritma pengisihan yang mudah dan intuitif Ideanya adalah untuk memilih elemen terkecil (atau terbesar) daripada elemen yang tidak diisih setiap kali dan menukarnya sehingga semua elemen diisih. Artikel ini akan menyediakan panduan menulis kod untuk pengisihan pemilihan dan melampirkan kod sampel Java tertentu. Prinsip Algoritma Prinsip asas isihan pemilihan ialah membahagikan tatasusunan yang hendak diisih kepada dua bahagian, diisih dan tidak diisih Setiap kali, elemen terkecil (atau terbesar) dipilih daripada bahagian yang tidak diisih dan diletakkan di hujung bahagian yang diisih. Ulang perkara di atas
