strtr() str_replace() substr_replace() preg_replace() ! W' \8 z. w" ] Y
strtr()的用法: - <?php/ o' A- z0 I- L
- . p. P3 W$ I7 a6 O/ c
- $str = "test";* V. `$ V) k+ D4 `8 k7 U2 R) l' b
4 n/ u" r$ N: Q5 ^' y- $str1 = strtr($str, 't', 'z'); // zesz9 [- z$ h. l- L, b6 t
- $str2 = strtr($str, 'tt', 'z1');// 1es1, e$ z9 v- |$ K& t
- $str3 = strtr($str, 't', '');// test' ?% n; @$ L: [' a. e- U7 Q
- $str4 = strtr($str, 'ts', '12');// 1e21
$ v4 e$ |, s) u' d$ k- h
; x ^' @* l( s3 K0 x# H( n
% Z4 Q7 D/ @; ]8 M" f7 | V- $str5 = strtr($str, array("t" => '')); // es8 Z( i- Q* Z0 D
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
) w$ ]) A8 `- ]1 }9 @+ G7 P 有两种传递参数的格式,一种是数组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 2 S2 L% g4 W7 g9 [* M6 t. o% r
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php; P$ e9 J Q2 v) s+ g) w
' R! ?' U! R K/ E, ]' F- $str = "test";
7 O4 k: v1 J% _! K. p h
4 A$ d! R; V0 z; L' D6 f, X) q- $str1 = str_replace('t', '', $str);// es
6 V& K+ ^% X2 J. x0 w8 C - $str2 = str_replace('es', 't', $str);// ttt
) }6 Q5 E) L( @: l) A
4 U& q9 t5 z+ O7 ?' u3 h5 V- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
6 [# e# K8 z) J0 g K2 }! L - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
" X- S$ a. g* A6 p; q - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
- b+ p/ Y# L% q- v% l - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee# _) L; B* X9 F! ?+ I/ h
! _* d$ D& q6 X5 `( L" c- $arr = array(
) L- Q4 Q" W0 A* D - 'a' => 'testa',' R2 c6 K2 h8 w) T3 N# p
- 'b' => 'testb',$ c" Y$ a' Z; I7 A7 Y' }# ]
- 'c' => array(
8 g) I& o, p( z3 O - 'ca' => 'tes1',
1 ]2 X6 y/ Y" s2 {3 O+ z: ? - 'cb' => 'tes2',) W0 a5 i% b+ D7 I. G
- ),3 g: @8 N$ I: O& H5 x
- );
! J! u$ }9 u2 {5 y2 K! i - * P5 g. C, f! Y' A; @& e8 C, U
- $arr1 = str_replace('es', 't', $arr);2 o8 x7 r7 z) C8 D* W2 H
- /**
9 e; \; ^0 a* ]+ h - $arr1 = array(
; |( Q$ k" a' E4 u5 @' C( X2 s - 'a' => 'ttta',& ~5 u# p2 N0 E' J
- 'b' => 'tttb',) n" \0 m6 E3 {; P- y- Y3 m
- 'c' => array() r2 H: j$ D/ Y% c9 o2 n* ]
- 'ca' => 'tes1',* d+ L% ]1 Y8 J$ z1 a
- 'cb' => 'tes2',/ E# E- t4 S9 B( _" i
- ),
6 E9 {: y) P/ V* J8 ]3 P9 N8 [ - );
) n/ U! o1 E4 l3 t* z- Y - *" ~5 F5 B; W4 M% D- @
- *8 e7 t& h+ N7 T0 f, X' k. d. I
- */
复制代码
' x6 k# B3 i& h
1 ?. v9 ~4 `5 b6 {% b+ p+ T3 ]. ^) \: R$ A9 [! \. w- k( S" U
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 8 V& L4 i. _5 G1 ]7 w
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php+ v" a% F# C0 k C4 N0 w
- ! N. U# ?' h) U, N" f) y
- $str = "test";
1 W0 X# Z7 z" u - 4 W. H% ~! d' U; ~) {9 s
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt4 H( J7 u5 W2 P5 l
- ) q) C0 O+ z' U+ S
- $arr = array(0 U7 _% w' g4 P K$ Z
- 'a' => 'what',
7 n/ c! b* G. G9 T1 B3 T3 u# M - 'b' => 'are',
# w8 {; x& x% \6 e- t - 'c' => array(
6 {4 u' Y9 n" Z3 L% f% j - 'ca' => '11',
" I. O8 G) L j( ?; e; ` - 'cb' => '22',
; h4 [; k9 O8 z! i - ),
0 N+ A+ s( q, \! ^( k - );
; G$ x g& f- [, k' _. ?2 T
# s* h8 U; \# g0 n' @/ t, h% [- $arr1 = substr_replace($arr, 'ok', 0, 1);
! D2 p% r4 z1 Z' V - /**& u0 m6 n" R8 y5 o
- $arr1 = array(
8 K9 C9 v& g9 i/ i$ L - 'a' => 'okhat',! ]& C5 I5 g+ B" C" ~8 M6 G7 ]; w
- 'b' => 'okre',
7 |; `5 l0 m2 g: ]& ` - 'c' => 'okarry'
+ p/ X% F7 B+ M2 M/ z - );
. g% `+ C/ m* H$ a/ L: ] - */
! {" _9 c N$ x$ m! x) S
复制代码
- \- l" z0 T; t+ ~! E数组替换的时候,也是处理一维数组的字符串值。。 ' P7 e& s8 { v
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php, P7 {: h3 @$ o, a) H* C
# `. f) V% Z5 K* d- $arr = array(
% m" u) r9 X% E$ _2 E4 p - 'a' => 'XXX25012349999XXX',// 不是以1开头
" W7 N$ Q: X, \4 k* ^7 n0 k, p - 'b' => 'XXX13188887777XXX',; y8 x8 x& } }) i1 O1 t2 L
- 'c' => 'XXXX918811113333XXXXX',
8 j, I/ v, ]1 i5 T - 'd' => 'XXXX188111133331XXXXX',
# b/ F- o! q) J - );2 f; U$ ^6 ^5 l+ M3 a
- ( [6 R6 |! j- `- j& f
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
2 p5 f. o* t$ ]$ |/ U- _2 |6 Q
1 Z3 v; U( V6 K0 O3 v, k. ?- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
. I8 Y! K; J1 v4 ]0 b
6 ^" P/ ] B0 r2 f8 E- /**. I. ]7 v k; R9 ~ S- R' R
- Array
! X+ K' \. f( U; W' g& c( |* D - (
4 o5 P1 O) o& ?1 d, G - [a] => XXX25012349999XXX
; T" W4 \* \/ }5 D# v - [b] => XXX mobile:13188887777 XXX
5 `1 }4 J# D, r9 L - [c] => XXXX918811113333XXXXX
% L2 A" E* @( v" ~, ^2 l - [d] => XXXX188111133331XXXXX
* V1 D1 o# @# P6 k9 [; J/ h P4 m - )8 f; V3 f8 E+ ^
- **/
复制代码 / E9 c4 L4 G' p2 R+ ~2 T2 q
- U: i- k3 x% v0 d" X$ z/ j
|