Home > Backend Development > PHP Tutorial > 技术贴 关于PHP字符串替换方面的 经常碰到 看描述

技术贴 关于PHP字符串替换方面的 经常碰到 看描述

WBOY
Release: 2016-06-23 13:46:43
Original
964 people have browsed it

实例代码

$string=' 键名 数组可以同时含有integer和 string 类型的键名,12345678 因为 PHP 实际并不区分索引数组和关联数组。如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。'; $keyArray=array('数组','integer','2345','键名');$replacement=array(	'0'=>array(		'0'=>"键名",		'1'=>"http://www.baidu.com",		'2'=>'2'		),	'1'=>array(		'0'=>"数组可以",		'1'=>"http://www.baidu.com",		'2'=>'2'		),	'2'=>array(		'0'=>"数组",		'1'=>"http://www.baidu.com",		'2'=>'1'		)		); //可以实现替换次数的控制,不仅限于只替换一次,比如$limit为2的时候表示一个词出现很多吃的时候仅替换2次,//-1表示全部替换。$search 和 $replace 都可以是字符串或者数组,但必须对应 	function str_replace_limit($search,$replace,$content,$limit=-1){ 	    if(is_array($search)){	        foreach ($search as $k=>$v){ 	            $search[$k]='`'.preg_quote($search[$k],'`').'`';	        } 	    }else{ 	        $search='`'.preg_quote($search,'`').'`';	    } 	   	    $content=preg_replace("/alt=([^ >]+)/is",'',$content); 	    return preg_replace($search,$replace,$content,$limit); 	}	function keylinks($string,$replacement){							for($i=0;$i<count($replacement);$i++){					$replacement[$i][1]="<a href=".$replacement[$i][1].">".$replacement[$i][0]."</a>";					    $string=str_replace_limit($replacement[$i][0],$replacement[$i][1],$string,$replacement[$i][2]);	}		return $string;	}		 echo keylinks($string,$replacement);
Copy after login

想要的功能

第二次已经替换了 数组可以 但是第三次替换的时候 却替换成了数组

想要实现的是 第二次替换的时候 有没办法 略过已经替换过的


回复讨论(解决方案)

foreach($replacement as $v) {  $p = '/([^>])(' . preg_quote($v[0]) . ')([^<])/s';  $r = "$1<a herf='$v[1]'>$2</a>$3";  $n = $v[2];  $string = preg_replace($p, $r, $string, $n);}echo $string;
Copy after login
Copy after login
键名 数组可以同时含有integer和 string 类型的键名,12345678 因为 PHP 实际并不区分索引数组和关联数组。
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

foreach($replacement as $v) {  $p = '/([^>])(' . preg_quote($v[0]) . ')([^<])/s';  $r = "$1<a herf='$v[1]'>$2</a>$3";  $n = $v[2];  $string = preg_replace($p, $r, $string, $n);}echo $string;
Copy after login
Copy after login
 键名 数组可以同时含有integer和 string 类型的键名,12345678 因为 PHP 实际并不区分索引数组和关联数组。
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。



尝试过这种方法 不过没有作用 达不到想要的效果  不知道还有其他的方法没
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template