0

0

关于腾讯的那道题截取字符串的题

php中文网

php中文网

发布时间:2016-06-23 14:03:39

|

2366人浏览过

|

来源于php中文网

原创

记得是前阵子去腾讯面试时的那道题,当时用笔我没写出来,就大概说了下思路,今天有空,就写了一下,发现要做到完美还是很麻烦的。


题目是:
假设有"123abc456def789"这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。

要求:
标记不得计算在长度之内。
2 截取后的字符串,要保留原有标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。

示例:
题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长度8,应返回123abc45。



我的做法大概思路是:
1 首先顺序读取字符串,并用一个resultstr变量来记录所有字符,当发现 2 如果发现tag变量形式为也就是html标签的开始标记),就将其入栈。用栈结构来存储这个标记。若遇到(html标签的结束标记),就出栈。

3 否则如果是常规字符的话,长度计数器++。直到与传入的要截取长度相等。

4 最后判断栈是否为空,如果为空,直接返回截取后的字符串,否则,将栈中剩余元素一个个出栈,循环从截取后的字符串中查找栈顶标签元素最后一次出现的位置,返回索引,将这个标签替换为空。直到整个栈为空为止。最后返回处理后的字符串。



原题其实是没有考虑标签嵌套的情况的,我尽量的让程序可以处理嵌套标签,使其更健壮。并且尽量少的去用php的内置函数,因为那样可能会掩盖算法本身。如可以处理a1

b2c3d4

e5
这种形式的嵌套标签。但我发现如果标签是这种不规则形式a1

b2c3d4

e5的话,程序就会出问题了。因为我只将取到的结束标记与栈顶的元素相比较,而没有去循环搜索整个栈。这里要改一下其实也可以。


不知大家还有没有其他思路,我感觉我这么做实在是太麻烦了,罗罗嗦嗦一大堆。这么多代码面试时拿笔写非得疯了不可。而且这个时间复杂度不理想,大概为O(n*(n2))。空间方面也占了很多多余的空间。我相信一定有很简单的办法。希望大家一起想想有什么更简单的方法没?



'; $j++,$length++ ){				$tag .= $str[$j];			}			$tagcnt++;			$length++;			$tag .= '>';						//如果是开始标记,则入栈,如果是与之相对应的结束标记则出栈			if( preg_match('/<([^\/]+)?>/i', $tag, $r) ){				echo '入栈:',htmlspecialchars($r[1]),'
'; array_push($tagstack, $r[1]); } elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/', $tag ) ){ echo '出栈:',htmlspecialchars($tagstack[count($tagstack)-1]),'
'; array_pop( $tagstack ); } $tag = ''; continue; } $charcnt++; $resultstr .= $str[$i]; } echo '
最后结果为:'; //栈是空的直接返回 if(empty($tagstack)){ return $resultstr; } //否则去掉没有结束标记的开始标记 else{ while(!empty($tagstack)){ $tag = array_pop($tagstack); $index = strrpos($resultstr, $tag); for($i = $index-1; $resultstr[$i] != '>'; $i++ ){ $resultstr[$i] = ''; } $resultstr[$i++] = ''; } return $resultstr; } }$sttime = microtime(true);$stmem = memory_get_usage();$str = "a1b2

c3d4e5

f6g7h8";echo '处理结果为:

',htmlspecialchars( mySubstr( $str, 18 ) ),'
';echo "内存使用情况:",(memory_get_usage()-$stmem),'
';echo "算法运行时间(microtime):",(microtime(true)-$sttime),'
';


回复讨论(解决方案)

应该说楼主的代码已经相当不错了

先提几点自己的看法
1、作为试题,考官已有先入为主的答案,任何对题面的深入剖析都可能被认为是画蛇添足。论坛首页上就有这样的报屈帖子
2、从题面入手就是边找html标记边计数(楼主也是这么做的)在到达退出条件时,检查缓存的html标记,因为不考虑嵌套所以处理成偶数个数即可,最后生成返回串。这样的代码量较少,即使不能上机调试,出错的概率也较小
3、作为实用函数,自然要考虑多些了。楼主的代码只考虑了一般性的标记配对,而忽略了html中是允许独立标记



、自封闭标记
等等出现的。而

标记无论嵌套多少层,是否匹配,在浏览器中的表现都是一样的

呵呵,这题有印象

来添砖加瓦

$str = "a1b2

c3d4e5

f6g7h8";$arr = preg_split('/(<[^>]*>)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);foreach($arr AS $k => $v){ if(isset($arr[$k+1])) { $temp = $arr[$k][1] + strlen($arr[$k][0]); $arr[$k][2] = substr($str, $temp, $arr[$k+1][1] - $temp); }}print_r($arr);/*经过这么处理后,字符串变成了由html标签 + 这个标签之前的字符 组成的元素 组成的数组。。如下Array( [0] => Array ( [0] => a1 [1] => 0 [2] => ) ……*/


接下来,遍历,将元素组成一个想要的字符串即可

同时稍加处理,记录,用+1, -1。。。如果,不加入字符串。。如果最终结果>0,则由后往前,替换几次


但是,还有一个问题。。。。。。。没有考虑这种情况

其实这样的话,注释也能考虑进来了

$arr	= preg_split('/(<\!--.*-->|<[^>]*>)/s', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);

这个题我上次测过
不好做

PHP手上有标签不配对时,自动补全的代码
估计腾讯的人如果没有答案,也够它搞几天的

实际应用中,一些程序有这功能,如网博士的网页选取保存

标签的混合嵌套是不符合xhtml标准的,但单标签闭合是允许的



这个题:

如果只考虑"123abc456def789"这个字符串
问题可以简单很多。


这就是只考一下你的算法

但不具实际应用意义,具有实际应用意的话就是标签不限,不是一下两个能解决的

对于
这种单标签是不受影响的,因为其第一次匹配到时在栈里找不到与之对应的开始标签是不会入栈的。不过对于
这种单标签确实是会出现问题。

呵呵,这题有印象

来添砖加瓦

PHP code

$str = "a1

b2

c3d4e5

f6g7h8";
$arr    = preg_split('/(]*>)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach($arr AS $k => $v)
{
    i……

哥们你的代码我没看太懂,最后出来的那个数组,字符并不是单独存在于数组每个元素的,如果按照长度来计算出我想要截取到的长度?

我理解为你希望看到的结果是
array
      0 => string 'a',
      1 => string '1',
      2 => string ''
      3 => string 'b',
      4 => string '2',
      ...


这样的形式,可以将每一个元素连接起来,取得截取后的字符串

呵呵,打印一下数组结构
比如
$str = "a1

b2

c3d4e5

万物追踪
万物追踪

AI 追踪任何你关心的信息

下载
f6g7h8
";
…………

结果如下,,遍历下数组,拼接字符串,应该就可以了。$arr[$i][1]是字符串开始位置,到这一步可以不用理会了
Array
(
    [0] => Array
        (
            [0] => a1
            [1] => 0
            [2] =>  
        )
 
    [1] => Array
        (
            [0] => b2
            [1] => 8
            [2] => 

 
        )
 
    [2] => Array
        (
            [0] => c
            [1] => 13
            [2] =>  
        )
 
    [3] => Array
        (
            [0] => 3
            [1] => 33
            [2] =>  
        )
……
……

引用 2 楼 amani11 的回复:
呵呵,这题有印象

来添砖加瓦

PHP code

$str = "a1

b2

c3d4e5

f6g7h8";
$arr    = preg_split('/(]*>)/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach($arr ……
那你理解错了,你最好先看看preg_split
结果是个二维的数组

这样不是更直观些?

$str = "a1b2

c3d4e5

f6g7h8
";$arr = preg_split("/(<\!--.*-->|<[^>]*>)/s", $str, -1, PREG_SPLIT_DELIM_CAPTURE);print_r($arr);

Array
(
    [0] => a1
    [1] => 


    [2] => b2
    [3] => 


    [4] => c
    [5] => 
    [6] => 3
    [7] => 
    [8] => d4
    [9] => 

    [10] => e5
    [11] => 


    [12] => f6
    [13] => 
    [14] => g7h8
    [15] => 

    [16] => 
)

引用 9 楼 shadowsniper 的回复:

引用 2 楼 amani11 的回复:
呵呵,这题有印象

来添砖加瓦

PHP code

$str = "a1

b2

c3d4e5

f6g7h8";
$arr = preg_split('/(]*>)/', $str, -1, PREG_SPLIT_OFFSET_……

明白了,如果是这样就可以将二维数组的元素连接起来了。不过最后还是要处理掉不匹配的标签。

写了个简单的,欢迎拍砖

/** * 函数名 html_substr * 功能 从html串中截取指定长度的字串,html标记不计算在内 * 参数 *  $str 要截取的串 *  $len 要截取的长度 *  $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐 * 返回 截取到的串 * 说明 *  未考虑多字节字符,仅已字节做计数单位 *  未考虑可单独存在的标记 **/function html_substr($str, $len, $mode=0) {  $ar= preg_split('/(<\!--.*-->|<[^>]*>)/s', $str, -1, PREG_SPLIT_DELIM_CAPTURE);  foreach($ar AS $k => $v) {    if($v{0} != '<') {      $len = $len - strlen($v);      if($len < 0) $ar[$k] = substr($v, 0, $len);    }else $ar[$k] = strtolower($v);    if($len <= 0) break;  }  $ar = array_slice($ar, 0, $k+1);  $len = count($ar);  foreach($ar as $k=>$v) {    if($v{0} == '<' && $v[1] != '/') {      $ch = str_replace('<', 'abc456def789";echo '';echo html_substr($str, 5) . PHP_EOL;echo html_substr($str, 5, 1);</pre>  <br> 123ab  <br> 123<em>ab</em>  <br></p> <p class="sougouAnswer">  学习了,高手都在啊。 </p> <p class="sougouAnswer">  唠叨老大写的这个很简洁,满足题意是绝对没问题了。但是如果再多考虑一些。假如这个字符串很长,1000个字节。而我只截取10个字符。  <br><br> 用preg_split将整个字符串按标签分组的话,正则解析器会搜索整个字符串。做了很多多余的搜索。 </p> <p class="sougouAnswer">  <pre class="sycode" name="code">$str = "a1<body>b2c3<p><em>d4</em>e</p>5f6</body>g7h8";$gn  = 7;$i   = $j = $k = 0;while( ($c = $str[$i++]) && $j < $gn ) {	if( $c == '<')	{		$tag = 1;	}	elseif($c == '>')	{		if(trim($tg,'/') == 'em')		{			$tgs[$j-1] = '<'.$tg.'>';		}		else 		{			if($tgs[$j-1]) $ogs[$j-1] = '1|'.'<'.$tg.'>';			else $ogs[$j-1] 		  = '0|'.'<'.$tg.'>';		}		$tag = 0;		$tg  = '';	}	elseif($tag == 1)	{		$tg .= $c;	}	else	{		$tmp[] = $c;		$j++;	}}$ts = count($tgs);if($ts % 2) array_pop($tgs);foreach($tmp as $k=>$v){   $ba = explode('|',$ogs[$k],2);   if( $tgs[$k] && $ogs[$k])   {		if($ba[0])		{			$s .= $v.$tgs[$k].$ba[1];		}			else $s .= $v.$ba[1].$tgs[$k];   }   else $s .= $v.$tgs[$k].$ba[1];}echo htmlspecialchars($s);</pre> </p> <p class="sougouAnswer">  不会做了。123<em>abc</em>456<em>def</em>789  <br> 一定要做的话,只会:  <br> 对标签作为分割符,对其视而不见,将第一段字符存贮为$a1;即$a1=123;第二断为$a2,$a2=abc;一直到$a.$i;  <br> 总之就是一段一段的  <br> $a1.$2.$a3.$a4.……  <br> 然后算字符,当第一段字符不够,接着取下一段。一直到够为止。  <br><br> 最后写条件加标签。  <br> 123奇abc偶456奇def偶789,$a1奇$a2偶$a3奇$a4偶$a5  <br> 奇偶条件。截取的如果奇偶对满,加标签,如果不满,就不加。 </p> <p class="sougouAnswer">  我做题的思路和楼主不太一样。  <br> 首先楼主直接把这个问题中的标签由 em 升级到通用性的 html 标签了,我觉得这种抽象的思维是一种好习惯,但针对如题的面试,我会就按如题所说,只对em 进行解析,完成第一版的原型,复杂的事情,以后时间多了慢慢的思考。 </p> <p class="sougouAnswer">  也写点代码,  <br> 我的思路是希望通过数据结构来处理这个问题,少依赖正则表达式。  <br> 例如  <br> 123<em>abc</em>456<em>def</em>789   <br> 的数据结构为  <br> tagInfo =>array(  <br>       1  start 3, end 6  <br>       2 start 9,  end 12  <br> ) 用于记录标签的位置  <br> 和stripStr = "123abc456def789"; 用来存取相应的去掉标签的字符串  <br> 这样一来,得到目标字符串,就成了在这个数据结构上去merge 最终字符串的一种算法了。  <br> 代码可以使用,在此我更多的是想表达一种思路,代码中有很多需要完善的地方,感谢大家指正,  <br>  <pre class="sycode" name="code">$str = "123<em>abc</em>456<em>def</em>789";$str1 = mysub($str,5);/************************the result is 123bc************************/$str2 = mysub($str,10);/************************the result is 123<em>abc</em>456d************************//** * * * * @param string $str * @param int $len * @return str 目标字符串 */function mysub($str,$len = 8){	$str = "123<em>abc</em>456<em>def</em>789";	$parseStr = getTag($str,"em");  //将字符串中的em 进行解析,得到所在的开始位置和结束位置.		//得到当前指定位置所在的游标.	$cur = -1;	foreach($parseStr as $key=>$val)	{		if($len >= $val["end"])		{			$cur = $key;		}	}	$dest_str = substr(strip_tags($str),0,$len);	    $dest_str = merge_str($dest_str,$cur,$parseStr);  //得到拼接出来的目标字符串        return $dest_str; }//生成最终数据function merge_str($dest_str,$cur,$parseStr){  for($i=0;$i<strlen($dest_str);$i++)  {  	$str_arr[$i] =substr($dest_str,$i,1);  }  foreach($parseStr as $key=>$val)  {  	if($cur >= $key)  	{  		echo $val["start"];  		$str_arr[ $val["start"] ] = "<em>".$str_arr[ $val["start"] ];  		$str_arr[ $val["end"]-1 ] .= "</em>";  		  	}  }     $str_out= implode("",$str_arr);   echo $str_out;  	}/** * 解析字符串中em 的 start end 位置. * */function getTag($str,$tagName = "em"){	preg_match_all("/<$tagName>(.*)<\/$tagName>/iU",$str,$matches);	$tagArr = $matches[1];  //将em 标签的内容放入tagArr数组。		//获取相应的起始位置.	foreach ($tagArr as $key=>$val)	{		$resultArr[$key]["val"] = $val;		$resultArr[$key]["start"] = handel_getstart($str,$val,$key);		$resultArr[$key]["end"] = handel_getend($str,$val,$key);	}	return $resultArr;	}//获取开始位置function handel_getstart($str,$val,$key){	return strripos($str,$val)- $key*9-4;    //这里写得比较随意,可能问题很多,todo : 要防止重复字符串时取位错误.}//获取结束位置function handel_getend($str,$val,$key){	return handel_getstart($str,$val,$key)+strlen($val);}</pre> </p> <p class="sougouAnswer">  唠叨老大写的这个很简洁,满足题意是绝对没问题了。但是如果再多考虑一些。假如这个字符串很长,1000个字节。而我只截取10个字符。  <br><br> 用preg_split将整个字符串按标签分组的话,正则解析器会搜索整个字符串。做了很多多余的搜索。  <br> 的确如此!  <br> 不过可以考虑只取一部分(比如待截取的长度*5)来做分析  <br><br> 是否使用正则表达式去分割字符串,是可商榷的。这取决于 memory_limit 的值  <br> 早期的php默认 memory_limit = 8M  <br> 这样的话,用正则表达式切割字符串远没有自己写一个函数来的快  <br> 现在的php默认 memory_limit = 128M  <br> 我测试了一下,还是正则来的快,所以就用了正则。毕竟看起来简洁多了  <br><br></p> <p class="sougouAnswer">  唠叨老大写的这个很简洁,满足题意是绝对没问题了。但是如果再多考虑一些。假如这个字符串很长,1000个字节。而我只截取10个字符。  <br><br> 用preg_split将整个字符串按标签分组的话,正则解析器会搜索整个字符串。做了很多多余的搜索。  <br><br> 我觉得在不考虑递归的情况下。  <br> 取字符串时可以预处理一下。  <br> 例如取前10 个,  <br> 最极端的情况下,字符串长度为  <br><em>1</em><em>2</em><em>3</em><em>4</em><em>5</em><em>6</em><em>7</em><em>8</em><em>9</em><em>0</em>  <br> 那么先把字段直接取前100个,使用唠叨老大的代码处理。。。 </p> <p class="sougouAnswer">  有点错,更正一下  <br><br> 为了便于测试,我仿你的思路写了个测试函数  <pre class="sycode" name="code">/** * 函数名 check_speed * 功能 统计运行时间和内存使用情况 * 参数 $num 大于0 开始计时,等于0或缺省 停止计时并输出结果 * 说明 本函数可以以 check_speed(运行次数, 函数名, 参数列表); *      方式调用。输出的结果是平均每次的耗时 **/function check_speed($num=0) {  static $time;  static $memo;  $argc = func_num_args();  $param = func_get_args();  switch($argc) {    case 1:      $time = microtime(true);      $memo = memory_get_usage();      break;    default:      $time = microtime(true);      $memo = memory_get_usage();      $len = array_shift($param);      $func = array_shift($param);      for($i = 0; $i<$len; $i++)        call_user_func_array($func, $param);      echo '<br />' . PHP_EOL . $func;    case 0:      $len or $len = 1;      echo '<br />' . PHP_EOL;      printf("时间: %s 微秒<br />%s", number_format((microtime(true) - $time)*1000000/$len), PHP_EOL);      printf("内存: %d<br />%s", memory_get_usage()-$memo, PHP_EOL);  }}</pre>  <br><br> 对你我的代码做了一下测试  <br> check_speed(100, 'html_substr', $str, 5);  <br> check_speed(100, 'mySubstr', $str, 5); //注:已注释掉影响速度的 echo 语句  <br><br> 结果如下:  <br><br> html_substr  <br> 时间: 42 微秒  <br> 内存: 3416  <br><br> mySubstr  <br> 时间: 85 微秒  <br> 内存: 3864  <br><br></p> <p class="sougouAnswer">  学习了! </p> <p class="sougouAnswer">  记得是前阵子去腾讯面试时的那道题,当时用笔我没写出来,就大概说了下思路,今天有空,就写了一下,发现要做到完美还是很麻烦的。  <br><br><br> 题目是:  <br> 假设有"123<em>abc</em>456<em>def</em>789"这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。  <br><br> 要求:  <br> 1 <em>和</em>标记不得计算在长度之内。  <br> 2 截取后的字符串,要……  <br> 楼主的思路很对呢。。只是特殊情况应该就不是他们面试的目的 </p> <p class="sougouAnswer">  我这里有啊....  <br><br><br> http://hi.baidu.com/lael80/blog/item/669ebe1e50f635134134172c.html  <br><br><br>  <pre class="sycode" name="code">//tags : 字符串可能包含的HTML标签//zhfw : 用来修正中英字宽参数function wsubstr($str, $length = 0, $suffixStr = "...", $start = 0, $tags = "div|span|p", $zhfw = 0.9, $charset = "utf-8"){//author: lael//blog: http://hi.baidu.com/lael80$re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";$re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";$re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";$zhre['utf-8']   = "/[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$zhre['gb2312'] = "/[\xb0-\xf7][\xa0-\xfe]/";$zhre['gbk']    = "/[\x81-\xfe][\x40-\xfe]/";$zhre['big5']   = "/[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";//下面代码还可以应用到关键字加亮、加链接等,可以避免截断HTML标签发生//得到标签位置$tpos = array();preg_match_all("/<(".$tags.")([\s\S]*?)>|<\/(".$tags.")>/ism", $str, $match);$mpos = 0;for($j = 0; $j < count($match[0]); $j ++){$mpos = strpos($str, $match[0][$j], $mpos);$tpos[$mpos] = $match[0][$j];$mpos += strlen($match[0][$j]);}ksort($tpos);//根据标签位置解析整个字符$sarr = array();$bpos = 0;$epos = 0;foreach($tpos as $k => $v){$temp = substr($str, $bpos, $k - $epos);if(!empty($temp))array_push($sarr, $temp);array_push($sarr, $v);$bpos = ($k + strlen($v));$epos = $k + strlen($v);}$temp = substr($str, $bpos);if(!empty($temp))array_push($sarr, $temp);//忽略标签截取字符串$bpos = $start;$epos = $length;for($i = 0; $i < count($sarr); $i ++){if(preg_match("/^<([\s\S]*?)>$/i", $sarr[$i]))continue;//忽略标签preg_match_all($re[$charset], $sarr[$i], $match);for($j = $bpos; $j < min($epos, count($match[0])); $j ++){if(preg_match($zhre[$charset], $match[0][$j]))$epos -= $zhfw;//计算中文字符}$sarr[$i] = "";for($j = $bpos; $j < min($epos, count($match[0])); $j ++){//截取字符$sarr[$i] .= $match[0][$j];}$bpos -= count($match[0]);$bpos = max(0, $bpos);$epos -= count($match[0]);$epos = round($epos);}//返回结果$slice = join("", $sarr);//自己可以加个清除空html标签的东东if($slice != $str)return $slice.$suffixStr;return $slice;}</pre> </p> <p class="sougouAnswer">  <br><br> preg_split 原来有这函数... </p> <p class="sougouAnswer">  腾讯居然这么干啊,真是服了 </p> <p class="sougouAnswer">  看看! </p> <p class="sougouAnswer">  路过,路过,学习 </p> <p class="sougouAnswer">  #25 代码有误,已更正 </p> <p class="sougouAnswer">  good thing </p> <p class="sougouAnswer">  全是高手啊、  <br></p> <p class="sougouAnswer">  用数据结构来考虑这道题  <br> struct Node_t  <br> {  <br>     char *pdata;//动态申请内存保存字符串,也可以直接指向源字符串地址,不包含  <br>     int nLen;//字符串长度,不包含  <br> }  <br><br> struct Node  <br> {  <br>     int flag;//统计不匹配情况,为0时表示完全匹配,开始下一个layer  <br>     Node_t *p_next;//下一个嵌套节点  <br>     Node *p_next_layer;//下一个完整节点开始  <br> }  <br><br> 如上结构,如果遇到不匹配的情况,flag++,同时开始新的嵌套节点,当flag为0时,开始新的node。到达指定长度后,根据节点重构字符串,如果该node的flag为0,每个node_t的字符串都要加上,如果不为0,则都不加上。  <br><br> 重构步骤,根据实际需求确定。 </p> <p class="sougouAnswer">  要把各种情况都考虑到就比较困难。 </p> <p class="sougouAnswer">  每天回帖即可获得10分可用分!  </p> <p class="sougouAnswer">  如果原串符合xml标准,根本不用考虑标签里的内容是什么,只要用栈进去就可以了,2n的时间复杂度 </p> <p class="sougouAnswer">  我只会用c c++做这个 </p> <p class="sougouAnswer">  世界性难题啊 </p> <p class="sougouAnswer">  如果原串符合xml标准,根本不用考虑标签里的内容是什么,只要用栈进去就可以了,2n的时间复杂度  <br> 如果原串标签不规范,主要的开销在于标签字符串匹配上面,那么时间复杂度最坏可到 2n+2*标签长度L*标签数量C。这样程序比较复杂,不是一下能搞定的,我写过HTML解析的初期版,花了一天时间,后来零碎的调试也差不多有天把时间修正BUG,因为总是有一些意外没有考虑到。 </p> <p class="sougouAnswer">  学习。。。 </p> <p class="sougouAnswer">  看看! </p> <p class="sougouAnswer">  学习。。。 </p>					</div>
					<div class="artmoreart ">
													<div class="artdp artptit"><span></span>
								<p>相关文章</p>
							</div>
							<div class="artmores flexColumn">
																	<a class="artmrlis flexRow" href="/faq/1444867.html" title="PHP:URL 传参时 MySQL 记录只显示一个单词的解决方案"><b></b>
										<p class="overflowclass">PHP:URL 传参时 MySQL 记录只显示一个单词的解决方案</p>
									</a>
																	<a class="artmrlis flexRow" href="/faq/1435869.html" title="PHP语言如何定义变量并进行数据类型转换 PHP语言变量定义与类型转换的基础教程​"><b></b>
										<p class="overflowclass">PHP语言如何定义变量并进行数据类型转换 PHP语言变量定义与类型转换的基础教程​</p>
									</a>
																	<a class="artmrlis flexRow" href="/faq/727533.html" title="PHP编程中处理中文字符长度技巧"><b></b>
										<p class="overflowclass">PHP编程中处理中文字符长度技巧</p>
									</a>
																	<a class="artmrlis flexRow" href="/faq/727532.html" title="PHP编程中处理中文字符长度技巧"><b></b>
										<p class="overflowclass">PHP编程中处理中文字符长度技巧</p>
									</a>
																	<a class="artmrlis flexRow" href="/faq/718141.html" title="PHP mb_substr 函数未执行的解决方法"><b></b>
										<p class="overflowclass">PHP mb_substr 函数未执行的解决方法</p>
									</a>
															</div>
						
						<p class="statement">本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn</p>
						<div class="lastanext flexRow">
													<a class="lastart flexRow" href="/faq/261290.html" title="求个对数据库增删改查的类"><span>上一篇:</span>求个对数据库增删改查的类</a>
													<a class="nextart flexRow" href="/faq/261293.html" title="php 简单的cookie问题~~"><span>下一篇:</span>php 简单的cookie问题~~</a>
												</div>
					</div>

					<div class="artlef-down ">
						
						<div class="moreAi ">
							<div class="rightdTitle flexRow">
								<div class="title-left flexRow"> <b></b>
									<p>热门AI工具</p>
								</div>
								<a target="_blank" class="rititle-more flexRow" href="/ai" title="热门AI工具"><span>更多</span><b></b></a>
							</div>

							<div class="moreailist flexRow">
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/723" title="DeepSeek" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679963982777.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="DeepSeek" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/723" title="DeepSeek" class="overflowclass abripone">DeepSeek</a>
												<p class="overflowclass abriptwo">幻方量化公司旗下的开源大模型平台</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/chat" target="_blank" >AI 聊天问答</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/726" title="豆包大模型" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680204067325.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="豆包大模型" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/726" title="豆包大模型" class="overflowclass abripone">豆包大模型</a>
												<p class="overflowclass abriptwo">字节跳动自主研发的一系列大型语言模型</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code/large-model" target="_blank" >AI大模型</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/725" title="通义千问" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679974228210.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="通义千问" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/725" title="通义千问" class="overflowclass abripone">通义千问</a>
												<p class="overflowclass abriptwo">阿里巴巴推出的全能AI助手</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/ai-agent" target="_blank" >Agent智能体</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/854" title="腾讯元宝" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679978251103.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="腾讯元宝" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/854" title="腾讯元宝" class="overflowclass abripone">腾讯元宝</a>
												<p class="overflowclass abriptwo">腾讯混元平台推出的AI助手</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/office/docs" target="_blank" >文档处理</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/chat" target="_blank" >AI 聊天问答</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/724" title="文心一言" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679974557049.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="文心一言" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/724" title="文心一言" class="overflowclass abripone">文心一言</a>
												<p class="overflowclass abriptwo">文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/text" target="_blank" >AI 文本写作</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/1507" title="讯飞写作" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/969/633/68b7a4153cd86671.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="讯飞写作" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/1507" title="讯飞写作" class="overflowclass abripone">讯飞写作</a>
												<p class="overflowclass abriptwo">基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/text" target="_blank" >AI 文本写作</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/text/chinese-writing" target="_blank" >中文写作</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/1115" title="即梦AI" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/001/246/273/68b6d8f7c530c315.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="即梦AI" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/1115" title="即梦AI" class="overflowclass abripone">即梦AI</a>
												<p class="overflowclass abriptwo">一站式AI创作平台,免费AI图片和视频生成。</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="" target="_blank" ></a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/image/image-titching" target="_blank" >图片拼接</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/808" title="ChatGPT" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679970194596.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="ChatGPT" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/808" title="ChatGPT" class="overflowclass abripone">ChatGPT</a>
												<p class="overflowclass abriptwo">最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/text" target="_blank" >AI 文本写作</a>													</div>
																							</div>
										</div>
									</div>
																	<div class="aidcons flexRow   ">
										<div   class="aibtns flexRow">
											<a target="_blank" href="/ai/821" title="智谱清言 - 免费全能的AI助手" class="aibtnsa flexRow" >
												<img src="https://img.php.cn/upload/ai_manual/000/000/000/175679976181507.png?x-oss-process=image/resize,m_mfit,h_70,w_70,limit_0" alt="智谱清言 - 免费全能的AI助手" class="aibtnimg" onerror="this.src='/static/lhimages/moren/morentu.png'">
											</a>
											<div class="aibtn-right flexColumn">
												<a target="_blank" href="/ai/821" title="智谱清言 - 免费全能的AI助手" class="overflowclass abripone">智谱清言 - 免费全能的AI助手</a>
												<p class="overflowclass abriptwo">智谱清言 - 免费全能的AI助手</p>
																									<div class="aidconstab flexRow">
														<a class="aidcontbp flexRow flexcenter"  href="/ai/tag/code" target="_blank" >AI 编程开发</a><a class="aidcontbp flexRow flexcenter"  href="/ai/tag/ai-agent" target="_blank" >Agent智能体</a>													</div>
																							</div>
										</div>
									</div>
															</div>
						</div>

					</div>


				</div>


			</div>
			<div class="conRight artdtilRight ">
				<div class="artrig-adv ">
                    <script type="text/javascript" src="https://teacher.php.cn/php/MDM3MTk1MGYxYjI5ODJmNTE0ZWVkZTA3NmJhYzhmMjI6Og=="></script>
                </div>
				<div class="hotzt artdtzt">
					<div class="rightdTitle flexRow">
						<div class="title-left flexRow"> <b></b>
							<p>相关专题</p>
						</div>
						<a target="_blank" class="rititle-more flexRow" href="/faq/zt" title="相关专题"><span>更多</span><b></b></a>
					</div>
					<div class="hotztuls flexColumn">
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/dywybrkyspgk" class="aClass flexRow hotzta" title="抖音网页版入口与视频观看指南 抖音官网视频在线访问"><img
										src="https://img.php.cn/upload/subject/202602/04/2026020411045387407.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="抖音网页版入口与视频观看指南 抖音官网视频在线访问" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/dywybrkyspgk" class="aClass flexRow hotztra overflowclass" title="抖音网页版入口与视频观看指南 抖音官网视频在线访问">抖音网页版入口与视频观看指南 抖音官网视频在线访问</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">25</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.04</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/xxtwybrkkyzxx" class="aClass flexRow hotzta" title="学习通网页版入口与在线学习指南 学习通官网登录与使用方法"><img
										src="https://img.php.cn/upload/subject/202602/04/2026020410570234058.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="学习通网页版入口与在线学习指南 学习通官网登录与使用方法" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/xxtwybrkkyzxx" class="aClass flexRow hotztra overflowclass" title="学习通网页版入口与在线学习指南 学习通官网登录与使用方法">学习通网页版入口与在线学习指南 学习通官网登录与使用方法</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">6</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.04</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/pwkjdsdkf" class="aClass flexRow hotzta" title="Python Web 框架 Django 深度开发"><img
										src="https://img.php.cn/upload/subject/202602/04/2026020410482197959.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="Python Web 框架 Django 深度开发" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/pwkjdsdkf" class="aClass flexRow hotztra overflowclass" title="Python Web 框架 Django 深度开发">Python Web 框架 Django 深度开发</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">4</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.04</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/jlsclyaksz" class="aClass flexRow hotzta" title="Java 流式处理与 Apache Kafka 实战"><img
										src="https://img.php.cn/upload/subject/202602/04/2026020410434379907.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="Java 流式处理与 Apache Kafka 实战" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/jlsclyaksz" class="aClass flexRow hotztra overflowclass" title="Java 流式处理与 Apache Kafka 实战">Java 流式处理与 Apache Kafka 实战</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">3</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.04</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/grqhydsz" class="aClass flexRow hotzta" title="Golang 容器化与 Docker 实战"><img
										src="https://img.php.cn/upload/subject/202602/04/2026020410375054482.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="Golang 容器化与 Docker 实战" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/grqhydsz" class="aClass flexRow hotztra overflowclass" title="Golang 容器化与 Docker 实战">Golang 容器化与 Docker 实战</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">3</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.04</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/qgtyfpcxptrkh" class="aClass flexRow hotzta" title="全国统一发票查询平台入口合集"><img
										src="https://img.php.cn/upload/subject/000/000/075/69817dbbe6af1726.png?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="全国统一发票查询平台入口合集" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/qgtyfpcxptrkh" class="aClass flexRow hotztra overflowclass" title="全国统一发票查询平台入口合集">全国统一发票查询平台入口合集</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">59</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.03</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/djapprkdzhz" class="aClass flexRow hotzta" title="短剧入口地址汇总"><img
										src="https://img.php.cn/upload/subject/000/000/075/69817c01a44ac510.png?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="短剧入口地址汇总" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/djapprkdzhz" class="aClass flexRow hotztra overflowclass" title="短剧入口地址汇总">短剧入口地址汇总</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">109</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.03</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/zwdzjsbbrkdzh" class="aClass flexRow hotzta" title="植物大战僵尸版本入口地址汇总"><img
										src="https://img.php.cn/upload/subject/000/000/075/698177478a066253.png?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="植物大战僵尸版本入口地址汇总" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/zwdzjsbbrkdzh" class="aClass flexRow hotztra overflowclass" title="植物大战僵尸版本入口地址汇总">植物大战僵尸版本入口地址汇总</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">53</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.03</p>
										</div>
									</div>
								</div>
							</div>
													<div class="hotztlls flexRow">
								<a target="_blank" href="/faq/cyyzxgxghj" class="aClass flexRow hotzta" title="c语言中/相关合集"><img
										src="https://img.php.cn/upload/subject/202602/03/2026020311355368427.jpg?x-oss-process=image/resize,m_mfit,h_75,w_120,limit_0" alt="c语言中/相关合集" class="hotztaimg"
										onerror="this.src='/static/lhimages/moren/morentu.png'"></a>
								<div class="hotztright flexColumn">
									<a target="_blank" href="/faq/cyyzxgxghj" class="aClass flexRow hotztra overflowclass" title="c语言中/相关合集">c语言中/相关合集</a>
									<p class="aClass flexRow hotztrp overflowclass">本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。</p>
									<div class="hotztrdown flexRow">
										<div class="htztdsee flexRow"> <b></b>
											<p class="">9</p>
										</div>
										<div class="htztdTime flexRow"> <b></b>
											<p>2026.02.03</p>
										</div>
									</div>
								</div>
							</div>
											</div>
				</div>

				<div class="hotdownload ">
					<div class="rightdTitle flexRow">
						<div class="title-left flexRow"> <b></b>
							<p>热门下载</p>
						</div>
						<a target="_blank" class="rititle-more flexRow" href="/xiazai" title="热门下载"><span>更多</span><b></b></a>
					</div>
					<div class="hotdownTab">
						<div class="hdTabs flexRow">
							<div class="check" data-id="onef">网站特效 <b></b> </div> /
							<div class="" data-id="twof">网站源码 <b></b></div> /
							<div class="" data-id="threef">网站素材 <b></b></div> /
							<div class="" data-id="fourf">前端模板 <b></b></div>
						</div>
						<ul class="onef">
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="jQuery网站logo动态展示" href="/xiazai/js/8781"><span>[图片特效]</span><span>jQuery网站logo动态展示</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="多元素动画滑块jQuery焦点图" href="/xiazai/js/8780"><span>[图片特效]</span><span>多元素动画滑块jQuery焦点图</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="CSS3全屏3D画布图片切换特效" href="/xiazai/js/8779"><span>[图片特效]</span><span>CSS3全屏3D画布图片切换特效</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="弹性拖动交互切换特效" href="/xiazai/js/8778"><span>[图片特效]</span><span>弹性拖动交互切换特效</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="jQuery鼠标移动图片遮罩显示特效" href="/xiazai/js/8777"><span>[图片特效]</span><span>jQuery鼠标移动图片遮罩显示特效</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="jQuery不同风格图片排列轮播切换" href="/xiazai/js/8776"><span>[图片特效]</span><span>jQuery不同风格图片排列轮播切换</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="js透明按钮图片滑动切换焦点图" href="/xiazai/js/8775"><span>[图片特效]</span><span>js透明按钮图片滑动切换焦点图</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="jQuery表单OA员工部门分组代码" href="/xiazai/js/8774"><span>[表单按钮]</span><span>jQuery表单OA员工部门分组代码</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="多图多屏jQuery幻灯片代码" href="/xiazai/js/8773"><span>[图片特效]</span><span>多图多屏jQuery幻灯片代码</span></a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" title="jQuery旋转木马自动切换代码" href="/xiazai/js/8772"><span>[图片特效]</span><span>jQuery旋转木马自动切换代码</span></a>
									</div>
								</li>
													</ul>
						<ul class="twof" style="display:none;">
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11355" title="openaishop"><span>[电商源码]</span><span>openaishop</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11354" title="思翔企(事)业单位文件柜 build 20080313"><span>[其它模板]</span><span>思翔企(事)业单位文件柜 build 20080313</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11353" title="雅龙智能装备工业设备类WordPress主题1.0"><span>[企业站源码]</span><span>雅龙智能装备工业设备类WordPress主题1.0</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11352" title="威发卡自动发卡系统"><span>[电商源码]</span><span>威发卡自动发卡系统</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11351" title="卡密分发系统"><span>[电商源码]</span><span>卡密分发系统</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11350" title="中华陶瓷网"><span>[电商源码]</span><span>中华陶瓷网</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11349" title="简洁粉色食品公司网站"><span>[电商源码]</span><span>简洁粉色食品公司网站</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11348" title="极速网店系统"><span>[电商源码]</span><span>极速网店系统</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11347" title="淘宝妈妈_淘客推广系统"><span>[电商源码]</span><span>淘宝妈妈_淘客推广系统</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/11346" title="积客B2SCMS商城系统"><span>[电商源码]</span><span>积客B2SCMS商城系统</span> </a>
									</div>
								</li>
													</ul>
						<ul class="threef" style="display:none;">
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4338" title="叠色几何风爱心情人节背景矢量"><span>[网站素材]</span><span>叠色几何风爱心情人节背景矢量</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4337" title="红色传统宝塔建筑矢量模板"><span>[网站素材]</span><span>红色传统宝塔建筑矢量模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4336" title="黑金复古祥云纹样矢量素材"><span>[网站素材]</span><span>黑金复古祥云纹样矢量素材</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4335" title="美味披萨折扣方形海报PSD素材下载"><span>[网站素材]</span><span>美味披萨折扣方形海报PSD素材下载</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4334" title="环保零浪费公益海报矢量模板"><span>[网站素材]</span><span>环保零浪费公益海报矢量模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4333" title="情人节快乐主题竖版海报PS素材下载"><span>[网站素材]</span><span>情人节快乐主题竖版海报PS素材下载</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4332" title="极简网球比赛运动海报矢量模板"><span>[网站素材]</span><span>极简网球比赛运动海报矢量模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4331" title="千禧复古镭射爱心派对矢量模板"><span>[网站素材]</span><span>千禧复古镭射爱心派对矢量模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4330" title="紫色风格牛排美食宣传INS模板设计下载"><span>[网站素材]</span><span>紫色风格牛排美食宣传INS模板设计下载</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/sucai/4329" title="复古山峰自然风景海报矢量背景"><span>[网站素材]</span><span>复古山峰自然风景海报矢量背景</span> </a>
									</div>
								</li>
													</ul>
						<ul class="fourf" style="display:none;">
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8590"  title="驾照考试驾校HTML5网站模板"><span>[前端模板]</span><span>驾照考试驾校HTML5网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8589"  title="驾照培训服务机构宣传网站模板"><span>[前端模板]</span><span>驾照培训服务机构宣传网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8588"  title="HTML5房地产公司宣传网站模板"><span>[前端模板]</span><span>HTML5房地产公司宣传网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8587"  title="新鲜有机肉类宣传网站模板"><span>[前端模板]</span><span>新鲜有机肉类宣传网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8586"  title="响应式天气预报宣传网站模板"><span>[前端模板]</span><span>响应式天气预报宣传网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8585"  title="房屋建筑维修公司网站CSS模板"><span>[前端模板]</span><span>房屋建筑维修公司网站CSS模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8584"  title="响应式志愿者服务网站模板"><span>[前端模板]</span><span>响应式志愿者服务网站模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8583"  title="创意T恤打印店网站HTML5模板"><span>[前端模板]</span><span>创意T恤打印店网站HTML5模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8582"  title="网页开发岗位简历作品展示网页模板"><span>[前端模板]</span><span>网页开发岗位简历作品展示网页模板</span> </a>
									</div>
								</li>
															<li>
									<div class="wzrfourli flexRow">
										<b></b>
										<a target="_blank" href="/xiazai/code/8581"  title="响应式人力资源机构宣传网站模板"><span>[前端模板]</span><span>响应式人力资源机构宣传网站模板</span> </a>
									</div>
								</li>
													</ul>
					</div>
					<script>
						$('.hdTabs>div').click(function (e) {
							$('.hdTabs>div').removeClass('check')
							$(this).addClass('check')
							$('.hotdownTab>ul').css('display', 'none')
							$('.' + e.currentTarget.dataset.id).show()
						})
					</script>

				</div>

				<div class="artrig-adv ">
					<script type="text/javascript" src="https://teacher.php.cn/php/MDM3MTk1MGYxYjI5ODJmNTE0ZWVkZTA3NmJhYzhmMjI6Og=="></script>
                </div>



				<div class="xgarts ">
					<div class="rightdTitle flexRow">
						<div class="title-left flexRow"> <b></b>
							<p>相关下载</p>
						</div>
						<a target="_blank" class="rititle-more flexRow" href="/xiazai" title="相关下载"><span>更多</span><b></b></a>
					</div>
					<div class="xgwzlist ">
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="php商城系统" href="/xiazai/code/11178">php商城系统</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="淘源码商城PHP淘宝查信誉" href="/xiazai/code/11177">淘源码商城PHP淘宝查信誉</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="PHP房产程序[BBWPS]" href="/xiazai/code/11165">PHP房产程序[BBWPS]</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="PHP简约自动发卡平台个人版" href="/xiazai/code/11128">PHP简约自动发卡平台个人版</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="ERMEB域名PHP离线网络授权系统" href="/xiazai/code/11040">ERMEB域名PHP离线网络授权系统</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="Difeye-敏捷的轻量级PHP框架" href="/xiazai/code/11037">Difeye-敏捷的轻量级PHP框架</a></div>
											<div class="xgwzlid flexRow"><b></b><a target="_blank" title="大泉州汽车网PHP整站程序" href="/xiazai/code/10963">大泉州汽车网PHP整站程序</a></div>
										</div>

				</div>

				<div class="jpkc">
					<div class="rightdTitle flexRow">
						<div class="title-left flexRow"> <b></b>
							<p>精品课程</p>
						</div>
						<a class="rititle-more flexRow" target="_blank" href="/course/sort_new.html" title="精品课程"><span>更多</span><b></b></a>
					</div>
					<div class=" jpkcTab">
						<div class=" jpkcTabs flexRow">
							<div class="check" data-id="onefd">相关推荐 <b></b> </div> /
							<div class="" data-id="twofd">热门推荐 <b></b></div> /
							<div class="" data-id="threefd">最新课程 <b></b></div>
						</div>
						<div class="onefd jpktabd">
												</div>

						<div class="twofd jpktabd" style="display:none;">
															<div  class="ristyA flexRow " >
									<a target="_blank" href="/course/1656.html" title="JavaScript ES5基础线上课程教学">
										<img src="https://img.php.cn/upload/course/000/000/081/6862652adafef801.png?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="JavaScript ES5基础线上课程教学" class="ristyAimg"
											onerror="this.src='/static/mobimages/moren/morentu.png'">
									</a>
									<div class="ristyaRight flexColumn">
										<a target="_blank" href="/course/1656.html" title="JavaScript ES5基础线上课程教学"
											class="rirightp overflowclass">JavaScript ES5基础线上课程教学</a>

										<div class="risrdown flexRow">
											<p>共6课时 | 11.2万人学习</p>
										</div>
									</div>
								</div>
															<div  class="ristyA flexRow " >
									<a target="_blank" href="/course/812.html" title="最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)">
										<img src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)" class="ristyAimg"
											onerror="this.src='/static/mobimages/moren/morentu.png'">
									</a>
									<div class="ristyaRight flexColumn">
										<a target="_blank" href="/course/812.html" title="最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)"
											class="rirightp overflowclass">最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)</a>

										<div class="risrdown flexRow">
											<p>共79课时 | 152万人学习</p>
										</div>
									</div>
								</div>
															<div  class="ristyA flexRow " >
									<a target="_blank" href="/course/639.html" title="phpStudy极速入门视频教程">
										<img src="https://img.php.cn/upload/course/000/000/068/62611ef88fcec821.jpg?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="phpStudy极速入门视频教程" class="ristyAimg"
											onerror="this.src='/static/mobimages/moren/morentu.png'">
									</a>
									<div class="ristyaRight flexColumn">
										<a target="_blank" href="/course/639.html" title="phpStudy极速入门视频教程"
											class="rirightp overflowclass">phpStudy极速入门视频教程</a>

										<div class="risrdown flexRow">
											<p>共6课时 | 53.5万人学习</p>
										</div>
									</div>
								</div>
													</div>

						<div class="threefd jpktabd" style="display:none;">
															<div  class="ristyA flexRow " >
										<a target="_blank" href="/course/1696.html" title="最新Python教程 从入门到精通">
											<img src="https://img.php.cn/upload/course/000/000/081/68c135bb72783194.png?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="最新Python教程 从入门到精通" class="ristyAimg"
												onerror="this.src='/static/mobimages/moren/morentu.png'">
										</a>
										<div class="ristyaRight flexColumn">
											<a target="_blank" href="/course/1696.html" title="最新Python教程 从入门到精通"
												class="rirightp overflowclass">最新Python教程 从入门到精通</a>

											<div class="risrdown flexRow">
												<p>共4课时 | 22.4万人学习</p>
											</div>
										</div>
									</div>
																<div  class="ristyA flexRow " >
										<a target="_blank" href="/course/1656.html" title="JavaScript ES5基础线上课程教学">
											<img src="https://img.php.cn/upload/course/000/000/081/6862652adafef801.png?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="JavaScript ES5基础线上课程教学" class="ristyAimg"
												onerror="this.src='/static/mobimages/moren/morentu.png'">
										</a>
										<div class="ristyaRight flexColumn">
											<a target="_blank" href="/course/1656.html" title="JavaScript ES5基础线上课程教学"
												class="rirightp overflowclass">JavaScript ES5基础线上课程教学</a>

											<div class="risrdown flexRow">
												<p>共6课时 | 11.2万人学习</p>
											</div>
										</div>
									</div>
																<div  class="ristyA flexRow " >
										<a target="_blank" href="/course/1655.html" title="PHP新手语法线上课程教学">
											<img src="https://img.php.cn/upload/course/000/000/081/684a8c23d811b293.png?x-oss-process=image/resize,m_mfit,h_86,w_140,limit_0" alt="PHP新手语法线上课程教学" class="ristyAimg"
												onerror="this.src='/static/mobimages/moren/morentu.png'">
										</a>
										<div class="ristyaRight flexColumn">
											<a target="_blank" href="/course/1655.html" title="PHP新手语法线上课程教学"
												class="rirightp overflowclass">PHP新手语法线上课程教学</a>

											<div class="risrdown flexRow">
												<p>共13课时 | 0.9万人学习</p>
											</div>
										</div>
									</div>
														</div>
						<script>
							$('.jpkcTabs>div').click(function (e) {
								$('.jpkcTabs>div').removeClass('check')
								$(this).addClass('check')
								$('.jpkcTab .jpktabd').css('display', 'none')
								$('.' + e.currentTarget.dataset.id).show()
							})
						</script>

					</div>
				</div>

				<div class="zxarts ">
					<div class="rightdTitle flexRow">
						<div class="title-left flexRow"> <b></b>
							<p>最新文章</p>
						</div>
						<a class="rititle-more flexRow" href="" title="最新文章" target="_blank"><span>更多</span><b></b></a>
					</div>
					<div class="xgwzlist ">
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="Laravel 登录页面提示“Page Expired”的根本原因与解决方案" href="/faq/2066335.html">Laravel 登录页面提示“Page Expired”的根本原因与解决方案</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何正确实现可访问的网格链接(span 包裹 a 标签的无障碍优化)" href="/faq/2066190.html">如何正确实现可访问的网格链接(span 包裹 a 标签的无障碍优化)</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何让 span 包裹的链接支持键盘访问(Enter 触发跳转)?" href="/faq/2066113.html">如何让 span 包裹的链接支持键盘访问(Enter 触发跳转)?</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何在 Laravel 请求验证中实现多字段联合唯一性校验" href="/faq/2066100.html">如何在 Laravel 请求验证中实现多字段联合唯一性校验</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何在 PHP 中为数据库导出表格添加列标题行" href="/faq/2065848.html">如何在 PHP 中为数据库导出表格添加列标题行</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何让带链接的 span 元素真正支持无障碍键盘操作(Tab + Enter)" href="/faq/2065805.html">如何让带链接的 span 元素真正支持无障碍键盘操作(Tab + Enter)</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何让 span 包裹的链接支持键盘可访问(Tab + Enter 触发跳转)" href="/faq/2065800.html">如何让 span 包裹的链接支持键盘可访问(Tab + Enter 触发跳转)</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何在PHP中创建新目录、复制文件并重命名" href="/faq/2065734.html">如何在PHP中创建新目录、复制文件并重命名</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何在PHP中为导出表格添加列标题行" href="/faq/2065718.html">如何在PHP中为导出表格添加列标题行</a></div>
													<div class="xgwzlid flexRow"><b></b><a target="_blank" title="如何在 WooCommerce 产品循环中显示商品图库的完整尺寸图片" href="/faq/2065710.html">如何在 WooCommerce 产品循环中显示商品图库的完整尺寸图片</a></div>
											</div>

				</div>






			</div>



		</div>

	</div>
	<!--底部-->
	<div class="phpFoot">
    <div class="phpFootIn">
        <div class="phpFootCont">
            <div class="phpFootLeft">
                <dl>
                    <dt>
                        <a target="_blank"  href="/about/us.html" rel="nofollow"  title="关于我们" class="cBlack">关于我们</a>
                        <a target="_blank"  href="/about/disclaimer.html" rel="nofollow"  title="免责申明" class="cBlack">免责申明</a>
                        <a target="_blank"  href="/about/jbzx.html" rel="nofollow"  title="举报中心" class="cBlack">举报中心</a>
                        <a   href="javascript:;" rel="nofollow" onclick="advice_data(99999999,'意见反馈')"   title="意见反馈" class="cBlack">意见反馈</a>
                        <a target="_blank"  href="https://www.php.cn/teacher.html" rel="nofollow"   title="讲师合作" class="cBlack">讲师合作</a>
                        <a  target="_blank" href="https://www.php.cn/blog/detail/20304.html" rel="nofollow"  title="广告合作" class="cBlack">广告合作</a>
                        <a  target="_blank" href="/new/"    title="最新文章列表" class="cBlack">最新更新</a>
                                                <div class="clear"></div>
                    </dt>
                    <dd class="cont1">php中文网:公益在线php培训,帮助PHP学习者快速成长!</dd>
                    <dd class="cont2">
                      <span class="ylwTopBox">
                        <a   href="javascript:;"  class="cBlack"><b class="icon1"></b>关注服务号</a>
                        <em style="display:none;" class="ylwTopSub">
                          <p>微信扫码<br/>关注PHP中文网服务号</p>
                          <img src="/static/images/examples/text16.png"/>
                        </em>
                      </span>
                        <span class="ylwTopBox">
                        <a   href="tencent://message/?uin=27220243&Site=www.php.cn&Menu=yes"  class="cBlack"><b class="icon2"></b>技术交流群</a>
                        <em style="display:none;" class="ylwTopSub">
                          <p>QQ扫码<br/>加入技术交流群</p>
                          <img src="/static/images/examples/text18.png"/>
                        </em>
                      </span>
                        <div class="clear"></div>
                    </dd>
                </dl>
                
            </div>
            <div class="phpFootRight">
                <div class="phpFootMsg">
                    <span><img src="/static/images/examples/text17.png"/></span>
                    <dl>
                        <dt>PHP中文网订阅号</dt>
                        <dd>每天精选资源文章推送</dd>
                    </dl>
                </div>
            </div>
        </div>
    </div>
    <div class="phpFootCode">
        <div class="phpFootCodeIn"><p>Copyright 2014-2026 <a   href="https://www.php.cn/" >https://www.php.cn/</a> All Rights Reserved | php.cn | <a   href="https://beian.miit.gov.cn/" rel="nofollow" >湘ICP备2023035733号</a></p><a   href="http://www.beian.gov.cn/portal/index.do" rel="nofollow" ><b></b></a></div>
    </div>
</div>
<input type="hidden" id="verifycode" value="/captcha.html">
<script>
    var _hmt = _hmt || [];
    (function() {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?c0e685c8743351838d2a7db1c49abd56";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>
<script>layui.use(['element', 'carousel'], function () {var element = layui.element;$ = layui.jquery;var carousel = layui.carousel;carousel.render({elem: '#test1', width: '100%', height: '330px', arrow: 'always'});$.getScript('/static/js/jquery.lazyload.min.js', function () {$("img").lazyload({placeholder: "/static/images/load.jpg", effect: "fadeIn", threshold: 200, skip_invisible: false});});});</script>

<span class="layui-hide"><script type="text/javascript" src="https://s4.cnzz.com/z_stat.php?id=1280886301&web_id=1280886301"></script></span>

<script src="/static/js/cdn.js?v=1.0.1"></script>



	<!--底部 end-->
	<!-- content -->
	<!--
    <div class="phpFudong">
        <div class="phpFudongIn">
            <div class="phpFudongImg"></div>
            <div class="phpFudongXue">登录PHP中文网,和优秀的人一起学习!</div>
            <div class="phpFudongQuan">全站<span>2000+</span>教程免费学</div>
            <div class="phpFudongCode"><a   href="javascript:;" id="login" title="微信扫码登录">微信扫码登录</a></div>
            <div class="phpGuanbi" onclick="$('.phpFudong').hide();"></div>
            <div class="clear"></div>
        </div>
    </div>
-->	<!--底部浮动层 end-->
	<!--侧导航-->
	<style>
    .layui-fixbar{display: none;}
</style>
<div class="phpSdhBox" style="height:240px !important;">
    <li>
        <div class="phpSdhIn">
            <div class="phpSdhTitle">
                <a   href="/k24.html"  class="hover" title="PHP学习">
                    <b class="icon1"></b>
                    <p>PHP学习</p>
                </a>
            </div>
        </div>
    </li>
    <li>
        <div class="phpSdhIn">
            <div class="phpSdhTitle">
                <a   href="https://www.php.cn/blog/detail/1047189.html" >
                    <b class="icon2"></b>
                    <p>技术支持</p>
                </a>
            </div>
        </div>
    </li>
    <li>
        <div class="phpSdhIn">
            <div class="phpSdhTitle">
                <a   href="#">
                    <b class="icon6"></b>
                    <p>返回顶部</p>
                </a>
            </div>
        </div>
    </li>
</div>
	</body>

</html>

<script type="text/javascript" src="/hitsUp?type=article&id=261292&time=1770195445">
</script>
<script src="/static/ueditor/third-party/SyntaxHighlighter/shCore.js?1770195445"></script>
<script>
	article_status = "0";
</script>
<input type="hidden" id="verifycode" value="/captcha.html">
<script type="text/javascript" src="/static/js/global.min.js?5.5.33"></script>
<link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all' />
<script type='text/javascript' src='/static/js/viewer.min.js?1'></script>
<script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script>
<script type="text/javascript" src="/static/js/jquery.cookie.js"></script>
<script>var _hmt = _hmt || [];(function(){var hm = document.createElement("script");hm.src="//hm.baidu.com/hm.js?c0e685c8743351838d2a7db1c49abd56";var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();(function(){var bp = document.createElement('script');var curProtocol = window.location.protocol.split(':')[0];if(curProtocol === 'https'){bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';}else{bp.src = 'http://push.zhanzhang.baidu.com/push.js';};var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(bp, s);})();</script>
	

<script>
	function setCookie(name, value, iDay) { //name相当于键,value相当于值,iDay为要设置的过期时间(天)
		var oDate = new Date();
		oDate.setDate(oDate.getDate() + iDay);
		document.cookie = name + '=' + value + ';path=/;domain=.php.cn;expires=' + oDate;
	}

	function getCookie(name) {
		var cookieArr = document.cookie.split(";");
		for (var i = 0; i < cookieArr.length; i++) {
			var cookiePair = cookieArr[i].split("=");
			if (name == cookiePair[0].trim()) {
				return decodeURIComponent(cookiePair[1]);
			}
		}
		return null;
	}
</script>


<!-- Matomo -->
<script>
	var _paq = window._paq = window._paq || [];
	/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
	_paq.push(['trackPageView']);
	_paq.push(['enableLinkTracking']);
	(function () {
		var u = "https://tongji.php.cn/";
		_paq.push(['setTrackerUrl', u + 'matomo.php']);
		_paq.push(['setSiteId', '7']);
		var d = document,
			g = d.createElement('script'),
			s = d.getElementsByTagName('script')[0];
		g.async = true;
		g.src = u + 'matomo.js';
		s.parentNode.insertBefore(g, s);
	})();
</script>
<!-- End Matomo Code -->

<script>
	setCookie('is_article', 1, 1);
</script>

<script>
	var is_login = "0";
        var show = 0;
        var ceng = getCookie('ceng');
        //未登录复制显示登录按钮
        if(is_login == 0 && false){
            $(".code").hover(function(){
                $(this).find('.contentsignin').show();
            },function(){
                $(this).find('.contentsignin').hide();
            });
            //不给复制
            $('.code').bind("cut copy paste",function(e) {
                e.preventDefault();
            });
            $('.code .contentsignin').click(function(){
                $(document).trigger("api.loginpopbox");
            })
        }else{
            // 获取所有的 <pre> 元素
            var preElements = document.querySelectorAll('pre');
            preElements.forEach(function(preElement) {
                // 创建复制按钮
                var copyButton = document.createElement('button');
                copyButton.className = 'copy-button';
                copyButton.textContent = '复制';
                // 添加点击事件处理程序
                copyButton.addEventListener('click', function() {
                    // 获取当前按钮所属的 <pre> 元素中的文本内容
                    var textContent = preElement.textContent.trim();
                    // 创建一个临时 textarea 元素并设置其值为 <pre> 中的文本内容
                    var tempTextarea = document.createElement('textarea');
                    tempTextarea.value = textContent;
                    // 将临时 textarea 添加到文档中
                    document.body.appendChild(tempTextarea);
                    // 选中临时 textarea 中的文本内容并执行复制操作
                    tempTextarea.select();
                    document.execCommand('copy');
                    // 移除临时 textarea 元素
                    document.body.removeChild(tempTextarea);
                    // 更新按钮文本为 "已复制"
                    this.textContent = '已复制';
                });

                // 创建AI写代码按钮
                var aiButton = document.createElement('button');
                aiButton.className = 'copy-button';
                aiButton.textContent = 'AI写代码';
                aiButton.style.marginLeft = '5px';
                aiButton.style.marginRight = '5px';
                // 添加点击事件处理程序
                aiButton.addEventListener('click', function() {
                // Generate a random number between 0 and 1
                        var randomChance = Math.random();

                    // If the random number is less than 0.5, open the first URL, else open the second
                    if (randomChance < 0.5) {
                        window.open('https://www.doubao.com/chat/coding?channel=php&source=hw_db_php', '_blank');
                    } else {
                        window.open('https://click.aliyun.com/m/1000402709/', '_blank');
                    }
                });

                // 将按钮添加到 <pre> 元素前面
                preElement.parentNode.insertBefore(copyButton, preElement);
                preElement.parentNode.insertBefore(aiButton, preElement);
        });
        }
</script>