見出し画像

今さらだけど str_replace(PHP)

PHPのstr_replace。
意外なことに、いままで置換対象にする文字列に配列を指定する機会がなかったのでちょっとハマった。
文字列置換で正規表現を必要としない単純置換ならpreg_replaceよりstr_replaceの方が速いので、HTMLソースを含むデータの一時出力に'<'を'&lt;'に置換しようとしたのだが。

$data = str_replace('<', '&lt;', $data);	// $dataは2次元配列

…と書いたらひとつも置換されていなくて「おや?」となった。
で。

…の例を見たら、まず配列かどうかチェックしているものがある。
つまり、subject(PHP Manual 参照)にはテキストか配列が使えるが、配列は1次元配列しか対応していない
ということで、以下の書き方が正しかった。

foreach ($data as $k => $r) {
	$data[$k] = str_replace('<', '&lt;', $r);
}

3次元以上の多次元配列なら、$rが配列かどうかチェックして(再帰関数を作るなどして)さらに深掘っていかないといけない。

いやしかし、置換元subjectに多次元配列を使う機会がなかったことに驚いた。

いいなと思ったら応援しよう!