web-dev-qa-db-ja.com

配列内の文字列をPHP

PHPの配列のすべての項目について、部分文字列を他の文字列に置き換えるにはどうすればよいですか?

ループを使ってそれをしたくありません。 PHPに、まさにそれを行う定義済みの関数がありますか?

配列のキーでそれを行うにはどうすればよいですか?

11
hd.
$array = array_map(
    function($str) {
        return str_replace('foo', 'bar', $str);
    },
    $array
);

だが - array_map は単なる隠しループです。本物を使ってみませんか?

foreach ($array as &$str) {
    $str = str_replace('foo', 'bar', $str);
}

それははるかに簡単です。

20
NikiC

ループなしで str_replace を使用しないのはなぜですか?

$array = array('foobar', 'foobaz');
$out = str_replace('foo', 'hello', $array);
76
netcoder

これは私が見つけてうまく使用した非常に良いアイデアです:

function str_replace_json($search, $replace, $subject) 
{
    return json_decode(str_replace($search, $replace, json_encode($subject)), true);
}

多次元配列にも適しています。

「true」を「false」に変更すると、連想配列ではなくオブジェクトが返されます。

ソース: コードリンク

6

これがどれほど効率的かはわかりませんが、大きな多次元配列の文字列を置き換えたいと思っていました。配列構造はかなり動的であるため、すべての項目をループしたくありませんでした。

まず、配列を文字列にjson_encodeします。

必要なすべての文字列を置き換えます(preg_replaceでエンコードされる英語以外の文字がある場合は、json_encodeを使用する必要があります)。

json_decode配列を元に戻します。

2
Golu
function my_replace_array($array,$key,$val){
    for($i=0;$i<count($array);$i++){
        if(is_array($array[$i])){
            $array[$i] = my_replace_array($array[$i],$key,$val);
        }else{
            $array[$i]=str_replace($key,$val,$array[$i]);
        }
    }
    return $array;
}
1
Ferhat KOÇER

array_walk_recursive()を使用

function replace_array_recursive( string $needle, string $replace, array &$haystack ){
    array_walk_recursive($haystack,
        function (&$item, $key, $data){
        $item = str_replace( $data['needle'], $data['replace'], $item );
        return $item;
    },
        [ 'needle' => $needle, 'replace' => $replace ]
    );
}
0
J.BizMai