strtr() str_replace() substr_replace() preg_replace() * N+ W7 i1 C( r- [; g% o& w0 Q! k
strtr()的用法: - <?php% f6 E, C4 @, ]! D% `/ `
- * D4 H" G: _$ `5 b
- $str = "test";
& G% k$ ~5 p! e0 v' B- B' a" d
p# W9 Z3 |" ]4 }/ g. Q ~% g- $str1 = strtr($str, 't', 'z'); // zesz6 I% D& j F* P: |; A
- $str2 = strtr($str, 'tt', 'z1');// 1es1- t8 j) `6 M( o/ `! X- Q9 Y
- $str3 = strtr($str, 't', '');// test: ?% R" B6 t& G$ _/ ~% s+ X# K
- $str4 = strtr($str, 'ts', '12');// 1e21
& Z5 e2 X! ^$ Q* Q! A M
! c) L% w3 F4 k# a
6 V$ }) Z, G' l8 W* j- $str5 = strtr($str, array("t" => '')); // es
6 I6 L+ g5 ]9 l7 e+ H1 @) ]3 X5 Z - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
1 v) H+ Q9 B9 W8 R 有两种传递参数的格式,一种是数组k=>v形式,一种是两个字符串的形式。 一,字符串情况 string strtr ( string $str , string $from , string $to ): search参数的每个字符和replace参数的字符对应(这个是该函数用法关键)。如果search中出现相同的字符,会按照search中最后一个字符对应的replace参数的字符代替(如第6行代码)。 如果search或者replace是空字符串,则不会被替换,原样输出(如第7行)。 二,数组k=>v情况 string strtr ( string $str , array $replace_pairs ): 这种情况比较简单,就是把字符串中的k替换成v 1 e4 K+ _+ A/ R% w. a. j. j
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
U! ?* w" G K* t; V7 K
& q# Z# @2 o) z9 M9 ~) o2 b1 U- $str = "test";* f( U" j3 x/ l3 V+ J$ ~
- 8 l* {6 O) ~% E4 M: R1 ?; W9 D
- $str1 = str_replace('t', '', $str);// es
5 R# b, g1 |* B, [ - $str2 = str_replace('es', 't', $str);// ttt
: V( K. G3 R2 X: f2 e/ |8 {& w
6 n ^. K3 M: k, ]& i- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
1 U( t( _$ E# t) G% J) @" s3 R - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
. ^4 Z8 N' d; }2 T - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
- I0 n6 Y1 T; V; G4 U6 O* L - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
# M, ]0 [. x. b
) l$ Z7 c0 V) P3 J7 J% n- z2 T- $arr = array(
: K4 J% {8 d7 `2 C - 'a' => 'testa',
; ~; @& I! h- K6 a - 'b' => 'testb',3 y$ s( u5 W& O& P3 e: B3 a3 t8 |0 O
- 'c' => array(# o5 |5 r- F# j- U. D
- 'ca' => 'tes1',4 f5 K8 d6 l% v8 x6 m+ W0 H( D: M! K
- 'cb' => 'tes2',
, e$ R3 e& K% x6 m* M8 i - ),& P$ I1 f1 J; |. i) t
- );
4 w. g# I, [ U, }/ z% ?
' x( i) ?5 y" A _- $arr1 = str_replace('es', 't', $arr);2 ~, Q5 R3 l$ g, |$ [1 ^, y
- /**- }0 t8 [! S# v2 }8 A/ E2 `
- $arr1 = array(/ ?7 Z8 _" A) N4 ?
- 'a' => 'ttta',# k4 ?' r) w: A( s
- 'b' => 'tttb',
. U& R) K3 ^8 ~ [$ d: t2 F* k - 'c' => array(
' v+ v) }5 J; D - 'ca' => 'tes1',
& H) |, Q& @ o: F4 i* i - 'cb' => 'tes2',
Z3 @' A; n/ U8 ]# @9 \ - ),
" d' g1 T1 V5 A3 Q7 A+ f - );& J5 c8 m/ {$ n3 J4 h, O4 b6 e, s7 j
- *
9 |, K" W( n( t/ O2 a6 r- ^ - *: k* e3 n4 a8 m# `: ^7 L5 b
- */
复制代码 ) K" w2 i' D/ g+ D
' F4 q1 v$ x) e% ^" @; t4 K& [
6 T3 h# R5 z X* x. Z9 astr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 ( S- {9 l* O+ T2 y
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php# w# l0 [+ M6 z( M' I) h$ f: F8 L
- # x( Y7 b) b. Z( W
- $str = "test";, r8 j* ?5 v2 [3 R3 K# m$ B- V
- # p0 p$ N- R' R. t5 H
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt1 U, n/ |+ z0 J/ [8 N. S, \
$ Y2 X$ l3 N2 F' ^; K; `- $arr = array(
+ o: _$ B7 S8 M - 'a' => 'what',/ d# g8 T9 z/ `; x* C) a
- 'b' => 'are',
# ^$ i5 q: r7 `* a, z: k - 'c' => array(- D9 w' ~+ w; B$ \5 I
- 'ca' => '11',8 B* I5 t- p0 C/ o( b
- 'cb' => '22',
( X# j! X# s4 N9 X - ),
8 \1 o+ i2 Z+ y9 [: T! I! v4 K - );6 f+ R" {& k+ e" c) l
. T, ?# E/ ^- n9 y( g8 |' n* g- $arr1 = substr_replace($arr, 'ok', 0, 1);7 M% x, z8 a. r; | {5 |, M
- /**& w: P, H0 y# F' I& r, ^
- $arr1 = array(4 o1 I: U3 I, }, o, E& e' [
- 'a' => 'okhat',
& R" j: }! h8 c( [+ L - 'b' => 'okre',7 d, ?. w8 [7 [, o. s4 `
- 'c' => 'okarry'
" _5 j6 A6 d/ S% C& e7 Q - );
- l( m0 l, Z, o+ k - */: w+ o$ i! \ A7 I) x
复制代码
1 m- A6 `5 h7 F/ A- z6 ^+ r U4 t9 G! ?数组替换的时候,也是处理一维数组的字符串值。。 ) Y4 j9 @$ U3 ^$ W5 D
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php" a- M5 b: @* ?3 ~( z% }8 w: `
- 3 v( `; G: V- a0 a
- $arr = array(2 u2 v+ U+ z# m
- 'a' => 'XXX25012349999XXX',// 不是以1开头
6 z! o4 Z! G6 A - 'b' => 'XXX13188887777XXX',/ h4 z6 q: @$ p% @; l1 @
- 'c' => 'XXXX918811113333XXXXX',5 s/ v! W; g( x7 S0 n" I8 ^
- 'd' => 'XXXX188111133331XXXXX',
L' @ m8 A, u+ ?) u - );
3 i8 Z) ]8 |) G7 f9 \) \ - 0 M8 Q' t: a: {+ T- N6 d- Z
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
6 K# |, J+ H: O, V# l# C3 D. E+ v, H - : c7 n) Y) I2 |: d
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 H/ D, L9 M# j, B3 D( L$ ]4 A
- ; @- n+ V* q0 U9 W& z% |
- /**
/ p1 v/ G5 G$ x+ n4 Z* H& \, m - Array
: c7 O' T: i% O& T - (0 j, P/ Y# l" Y# ]- m
- [a] => XXX25012349999XXX
9 P7 R8 _+ K# X7 t - [b] => XXX mobile:13188887777 XXX% Z# S& s' o! t
- [c] => XXXX918811113333XXXXX
! P( I7 m. m, x - [d] => XXXX188111133331XXXXX
4 x- O8 U1 l/ }+ @. L2 m: L - )
" U5 A8 A8 r9 f! Y - **/
复制代码 7 T ?, ]8 q+ K7 H% f7 t- h
3 o4 Q2 _% ^6 T0 _ |