[PHP-users 35104] Re: str_replaceの使い方に関して

ISHIDA Akio iakio @ mono-space.net
2010年 4月 13日 (火) 13:17:20 JST


こんにちは。石田と申します。

2010年4月11日17:46 mao <mao @ nextyle.com>:
> お世話になります。MAOです。
>
> 初歩的な質問ですみません。
>
> $search  = array('A', 'B', 'C', 'D', 'E');
> $replace = array('B', 'C', 'D', 'E', 'F');
> $subject = 'ABCDE';
> echo str_replace($search, $replace, $subject);
>
> としたばあい、
> FFFFF
> となると思うのですが、
> これを、BCDEFの結果を得たい場合は、
> どうすればよいのでしょうか?
>
> preg_replace_callbackを使えばよいのかとおもい、
>
> $search  = array('A', 'B', 'C', 'D', 'E');
> $replace = array('B', 'C', 'D', 'E', 'F');
> $subject = 'ABCDE';
> echo preg_replace_callback("/[".join("",$search)."]/",create_function(
> '$matches',
> 'Global $search,$replace;return str_replace($search, $replace, $matches[0]);'
> ),
> $subject
> );
>
> なども試してみましたが、結果は同じでした。

preg_replaceでもいいのであれば、str_replaceを使わずに

$search  = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'ABCDE';
echo preg_replace_callback("/[".join("",$search)."]/",create_function(
'$matches',
'Global $search,$replace; $tbl = array_combine($search, $replace);
return $tbl[$matches[0]];'
),
$subject
);

でどうでしょうか。

>
> よろしくお願いいたします。
>
> --
> MAO
> mao @ nextyle.com
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
>



-- 
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>


PHP-users メーリングリストの案内