strtr() str_replace() substr_replace() preg_replace()
) j+ O, _$ @% f# O1 Sstrtr()的用法: - <?php
, w9 p2 _/ y/ ~- h5 P) I - 9 x) B& p/ X0 u
- $str = "test";# Z$ M, H, `8 Z4 N U
- 0 a% O! B* W# |' K4 c% L3 R
- $str1 = strtr($str, 't', 'z'); // zesz
& B7 B2 _3 H5 O - $str2 = strtr($str, 'tt', 'z1');// 1es1 @ R& D& ? n* f# `
- $str3 = strtr($str, 't', '');// test
9 J1 W# g) Q* R5 d - $str4 = strtr($str, 'ts', '12');// 1e21
5 ~# W1 t M& y) c) n
V3 N3 b6 \) h- n- 8 q1 d4 H$ W; L P: ]
- $str5 = strtr($str, array("t" => '')); // es
- ` J/ x* W8 T( C1 I - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 3 W! T/ ^* V( c3 E
有两种传递参数的格式,一种是数组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 M/ f$ K5 K& b. O6 L
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
: h( E# O d3 H. J* D# e% A
9 Q: [' L k, v( F- $str = "test";
' J. h" m- F% ^+ D - ! c* Q0 F I7 S$ D+ F
- $str1 = str_replace('t', '', $str);// es, i6 Q1 e* [5 l: J7 [/ E
- $str2 = str_replace('es', 't', $str);// ttt
( L! Y0 @% \6 H* S1 ^- k; m6 R! w - . b# }: n2 a, ? w- ]* e2 a
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
' a( J8 D$ n+ A' v* d$ @ - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae. J& K8 T _: b
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa" X* O- Y$ w K; C
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee9 P0 t; q6 A6 k, A/ l
- 7 C: X) v# P7 n* {( f' r! h
- $arr = array(3 G6 |9 V$ T u# o
- 'a' => 'testa',( J9 U2 ]+ W. T8 a* _
- 'b' => 'testb',1 F0 |* D, E' f) F, ]8 _( }
- 'c' => array(
- _' z) M" u4 \: A - 'ca' => 'tes1', f+ _3 S" \+ X5 i# K8 \
- 'cb' => 'tes2',3 g6 U. Z# L1 w; F
- ),0 P0 c9 f2 Q) b: A; ^
- );# {" M, w: r: d: { |
- & S4 k6 \% n* o* M
- $arr1 = str_replace('es', 't', $arr);
0 S+ P0 p2 E0 T - /**
1 @2 @% M5 ^8 k9 x2 @+ [ - $arr1 = array(
( O% C$ S7 I2 x2 I7 @" V - 'a' => 'ttta',, ~* y0 T. G- Z4 ~. M7 X
- 'b' => 'tttb',- e; E% C( N/ _1 [8 W2 h _
- 'c' => array(
U. d$ h8 W# h# _& J+ Q. t - 'ca' => 'tes1',
7 c9 C* \6 n) t( K6 n - 'cb' => 'tes2',
0 W+ d+ G5 Z& |5 b- r - ),
- t& F- @3 w7 Z$ O6 v - );* g8 F7 c' y3 u, ^7 T
- *
) N- X( a8 b+ j! E f9 A3 m - *
( D4 a0 c- w9 X - */
复制代码 . K! u3 O, ~, b, F
( w s2 x, p9 J+ O9 O2 T3 D
) L3 E, P/ S- |6 t
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 * z3 c" e$ a3 |! J, M$ F
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
! @1 F) B- h7 Q; ]* b+ W- |; T
/ I1 E% Z; b' G! `( c- $str = "test";- [# B7 C+ Q$ A/ Y4 f# o
- $ [( o9 p) X( L
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt/ }5 k6 h9 s: Z
- 2 r% t, e9 u: k7 ^# g& m1 x/ g& }
- $arr = array(( A$ }9 q3 J& A' C2 V
- 'a' => 'what',
$ T% L" q0 |$ ~- R; S; G4 ~3 G0 w0 C - 'b' => 'are',
( V& o7 \/ B" m1 v - 'c' => array(6 y% v7 F& L4 D& t3 f# y* w
- 'ca' => '11',
" U2 j5 f+ h* S3 P% q6 b0 ?9 i0 V; H - 'cb' => '22',
+ r& K/ _- I0 w. X+ y# M. N( p - ),
, S" x6 Z! i: o8 X, R - );5 T+ G' B0 Z8 k& Q5 m0 ^
2 X3 A. S8 |0 o+ c) N- $arr1 = substr_replace($arr, 'ok', 0, 1);
+ e9 [8 X2 P8 M% c. \* } - /**" t0 g( I* L4 h5 e5 E* U5 f
- $arr1 = array(
, u U3 t/ |5 o, T# ]/ z - 'a' => 'okhat',
$ u; v' z7 {& X# c - 'b' => 'okre',2 |* }1 e/ V3 V
- 'c' => 'okarry'0 E8 `' m2 u. `/ R3 ~: f
- );: T R. U) V/ P3 P* O/ A
- */
, P9 m2 o6 y3 Z% E! t) `( L7 ]
复制代码 7 L" I* a. r* t: V
数组替换的时候,也是处理一维数组的字符串值。。 3 I. d5 A- k6 X( `( `
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php" E% C' X$ }+ ~
- $ E; q. U) i8 P4 f- w( }
- $arr = array(! X$ H! B: i! a, N
- 'a' => 'XXX25012349999XXX',// 不是以1开头2 ?' ?5 A, c2 F- @- @# ^/ D1 k7 Q
- 'b' => 'XXX13188887777XXX',4 L+ T* N, s% J% u0 r) i
- 'c' => 'XXXX918811113333XXXXX',
) D F/ e# S) U! Z) b( `9 h - 'd' => 'XXXX188111133331XXXXX',
8 d z. L. v. g4 d - );
( Z4 v; l- }+ N - & F! q( q8 Y- a
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3: R8 n# z' \( H! ^! R1 j# T
) Q; r( V: I+ g, R- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号- `+ |( y% S" O1 O: \( u! w$ Z
- ! n/ M! t v! L9 H
- /**. h, l, r5 _0 `9 {* t
- Array
2 Y$ Z1 m% e+ Y) M/ ]4 A - (5 s/ `" P+ q; w( z1 n9 u0 a
- [a] => XXX25012349999XXX. h8 k. C+ W8 \" i6 |- o
- [b] => XXX mobile:13188887777 XXX6 u1 p1 s6 G6 p [ D8 M- b( h
- [c] => XXXX918811113333XXXXX
# t' }: O2 D3 t% Z+ w - [d] => XXXX188111133331XXXXX; e/ {/ ^# f0 W& j* y
- )) I2 a1 u8 |7 a
- **/
复制代码 $ E5 b9 g: D8 C" [! X: N6 s6 f
: f1 P, A/ N7 c1 E" Z7 u |