ホームページ >バックエンド開発 >PHPチュートリアル >PHP 文字列置換に関する技術的な投稿 (よく見かける) の説明を参照してください。

PHP 文字列置換に関する技術的な投稿 (よく見かける) の説明を参照してください。

WBOY
WBOYオリジナル
2016-06-23 13:46:43967ブラウズ

实例代码

$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);

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

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


回复讨论(解决方案)

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;
 66e7c077d957bc701c22fcb4a3783cec键名5db79b134e9f6b82c0b36e0489ee08ed 66e7c077d957bc701c22fcb4a3783cec数组可以5db79b134e9f6b82c0b36e0489ee08ed同时含有integer和 string 类型的66e7c077d957bc701c22fcb4a3783cec键名5db79b134e9f6b82c0b36e0489ee08ed,12345678 因为 PHP 实际并不区分索引66e7c077d957bc701c22fcb4a3783cec数组5db79b134e9f6b82c0b36e0489ee08ed和关联数组。
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。

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;
 66e7c077d957bc701c22fcb4a3783cec键名5db79b134e9f6b82c0b36e0489ee08ed 66e7c077d957bc701c22fcb4a3783cec数组可以5db79b134e9f6b82c0b36e0489ee08ed同时含有integer和 string 类型的66e7c077d957bc701c22fcb4a3783cec键名5db79b134e9f6b82c0b36e0489ee08ed,12345678 因为 PHP 实际并不区分索引66e7c077d957bc701c22fcb4a3783cec数组5db79b134e9f6b82c0b36e0489ee08ed和关联数组。
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。



尝试过这种方法 不过没有作用 达不到想要的效果  不知道还有其他的方法没
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。