いつまで続くのか、何を書くのか、それもまた流れのままに 頭の中にまとまらないものがあるから そんなのがふと出た時に書いていく
僕のネット帳
スポンサーサイト
-----------  CATEGORY: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ページトップへ
str_replace、便利な所と注意点
2007-12-08-Sat  CATEGORY: php
指定した文字列を置換してくれるstr_replace()関数。この関数、全ての引数に文字列だけではなく配列も使用でき、とても便利です。ただ、便利だからとあんまり調子に乗ると・・・? 今回は、str_replace()関数の使用法と、その際のちょっとした注意点について紹介します。 str_replace()に関しては以前のTIPSメーリングリスト(http: //www.phppro.jp/phptips/archives/vol2/)でも少し触れられていますが、引数を配列に使用した際の挙動について、簡単におさらいしておきましょう。 以下のように、第1引数に配列、第2引数に文字列を指定すると、配列の各値に該当する文字列が全て、第2引数に指定した文字列に置換されます。 結果: string(5) "ZZZZe" 第1、第2引数が共に配列を指定した場合、第1引数の各要素に対応した第2引数の要素が置換に使用されます。第2引数の方が要素数が少なく、対応する要素がない場合は、空文字列""に置換されます。 結果: string(4) "1234" 置換対象の第3引数にも配列が使用できて、その場合、第3引数の各要素に対して順次置換が行われていきます。 結果: array(2) { [0]=> string(3) "123" [1]=> string(4) "4321" } このように、str_replaceは配列を引数としてとることで非常に便利に使えます。 ただ、上記のように配列を引数として使用する際には、少し癖のある動作が存在します。それは、再帰的な置換が行われるという点と、2次元以上の配列を用いた場合です。 まず、この関数は第1引数の配列の先頭から順に、置換対象の文字列に対して再帰的に置換をしていきます。 結果: string(4) "423d" この結果は、一度"a"が"1"に置換された後、さらに"1"が"4"で置換されたものです。なので、再帰的な置換を行いたくない場合は、第2回のTIPSメーリングリスト(http: //www.phppro.jp/phptips/archives/vol2/)で取り上げられているとおり、strtr 関数を使うとよいでしょう。 また、引数で使用できる配列は、2次元以上の配列には対応していません。第1、第2引数に2次元以上の配列を使用しようとすると、Noticeを吐いて強制的に文字列型へ型変換したものを置換に使用します。 結果: Notice: Array to string conversion in C:\usr\hoge.php on line 6 array(2) { [0]=> string(6) "ab34ef" [1]=> string(9) "This is 5" } 第3引数に2次元以上の配列を指定した場合には、その部分に関しては一切の置換が行われず、そのままの内容が返されます。 結果: array(3) { [0]=> string(2) "12" [1]=> string(2) "34" [2]=> array(2) { [0]=> string(2) "ab" [1]=> string(2) "cd" } } そのため、2次元以上の配列の中身を置換しようと考える場合は、相応の処理で1 次元まで落とし込む必要があります。 なお蛇足ですが、これらの挙動は、PHP5から追加されたstr_ireplace関数でも同様です。 普段使う分には余り気にしないような点ですが、頭の片隅にとどめておくと何かのときに役に立つかもしれません。 str_replace : http://www.phppro.jp/phpmanual/php/function.str-replace.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070307/264100/
ページトップへ  トラックバック0 コメント0
コメント

管理者にだけ表示を許可する
 
トラックバック
TB*URL
<< 2017/10 >>
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -


余白 Copyright © 2005 僕のネット帳. all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。