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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









入門コード例で Python プログラミングについて学ぶ Python は、習得が簡単でありながら強力なプログラミング言語です。初心者にとって、Python プログラミングの入門コード例を理解することは非常に重要です。この記事では、すぐに始めるのに役立つ具体的なコード例をいくつか紹介します。 Print HelloWorldprint("HelloWorld") これは、Python の最も単純なコード例です。 print()関数は、指定された内容を出力するために使用されます。

PHP 変数はプログラムの実行中に値を保存し、動的でインタラクティブな WEB アプリケーションを構築するために重要です。この記事では、PHP 変数を詳しく説明し、10 個の実際の例を使用して実際に動作する様子を示します。 1. ユーザー入力の保存 $username=$_POST["username"];$passWord=$_POST["password"]; この例では、フォーム送信からユーザー名とパスワードを抽出し、その後の処理のために変数に保存します。 2. 構成値 $database_host="localhost";$database_username="username";$database_pa を設定します。

Java バブル ソートの最も簡単なコード例 バブル ソートは一般的な並べ替えアルゴリズムであり、その基本的な考え方は、並べ替える順序を、隣接する要素の比較と交換を通じて順序付けされた順序に徐々に調整することです。次に、バブル ソートの実装方法を示す簡単な Java コード例を示します。 publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

タイトル: 初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装 データ構造はプログラミングにおいて重要な役割を果たし、プログラミングの基礎です。 Go 言語には、一般的に使用されるデータ構造が多数あり、これらのデータ構造の実装をマスターすることは、優れたプログラマーになるために重要です。この記事では、Go 言語で一般的に使用されるデータ構造を紹介し、読者がこれらのデータ構造を使い始めて習熟するのに役立つ、対応するコード例を示します。 1. 配列 配列は基本的なデータ構造であり、同じ型のグループです。

「Go 言語プログラミングの例: Web 開発におけるコード例」 インターネットの急速な発展に伴い、Web 開発はさまざまな業界で不可欠な部分になりました。 Go 言語は、強力な機能と優れたパフォーマンスを備えたプログラミング言語として、Web 開発の開発者にますます好まれています。この記事では、読者が Go 言語をより深く理解し、Go 言語を使用して独自の Web アプリケーションを構築できるように、具体的なコード例を通じて Web 開発に Go 言語を使用する方法を紹介します。 1. シンプルな HTTP サーバー まず、

PHP を使用して在庫管理システムの在庫管理機能コードを記述する方法 在庫管理は多くの企業にとって不可欠な部分です。複数の倉庫を持つ企業にとって、在庫管理機能は特に重要です。在庫を適切に管理および追跡することで、企業は異なる倉庫間で在庫を割り当て、運用コストを最適化し、コラボレーション効率を向上させることができます。この記事では、PHP を使用して在庫倉庫管理機能のコードを記述する方法を紹介し、関連するコード例を示します。 1. 在庫倉庫管理機能のコードを書き始める前に、データベースを確立します。

Java 選択ソート方法のコード記述ガイドと例 選択ソートは、シンプルで直観的なソート アルゴリズムです。そのアイデアは、ソートされていない要素から毎回最小 (または最大) の要素を選択し、すべての要素がソートされるまで交換することです。この記事では、選択項目の並べ替えのためのコード作成ガイドを提供し、特定の Java サンプル コードを添付します。アルゴリズム原理 選択ソートの基本原理は、ソート対象の配列をソート済み部分とソートされていない部分の 2 つの部分に分割し、その都度、未ソート部分から最小 (または最大) の要素が選択され、ソート済み部分の最後に配置されます。上記を繰り返します

Huawei クラウド エッジ コンピューティング相互接続ガイド: インターフェイスを迅速に実装するための Java コード サンプル IoT テクノロジーの急速な発展とエッジ コンピューティングの台頭により、ますます多くの企業がエッジ コンピューティングのアプリケーションに注目し始めています。 Huawei Cloud はエッジ コンピューティング サービスを提供し、企業に信頼性の高いコンピューティング リソースと便利な開発環境を提供し、エッジ コンピューティング アプリケーションの実装を容易にします。この記事では、Java コードを通じて Huawei Cloud エッジ コンピューティング インターフェイスを迅速に実装する方法を紹介します。まずは開発環境を準備する必要があります。 Java Development Kit がインストールされていることを確認してください (
