17

如何在 PHP 中用其他字符串替换数组中所有项目的子字符串?

我不想使用循环来做到这一点。PHP中是否有一个预定义的函数可以做到这一点?

我怎样才能在数组的键上做到这一点?

4

7 回答 7

89

为什么不直接使用str_replace而不使用循环?

$array = array('foobar', 'foobaz');
$out = str_replace('foo', 'hello', $array);
于 2011-02-12T08:13:00.323 回答
28
$array = array_map(
    function($str) {
        return str_replace('foo', 'bar', $str);
    },
    $array
);

但这array_map只是一个隐藏的循环。为什么不使用真实的?

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

这要容易得多。

于 2011-02-12T08:07:10.117 回答
8

这是我发现并成功使用的一个非常好的主意:

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

它也适用于多维数组。

如果将“true”更改为“false”,那么它将返回一个对象而不是关联数组。

资料来源:代码链接

于 2014-11-13T10:51:16.897 回答
2

我不确定这有多有效,但我想替换大型多维数组中的字符串,并且不想循环遍历所有项目,因为数组结构非常动态。

我先把json_encode数组变成一个字符串。

替换我想要的所有字符串(preg_replace如果有非英文字符由 编码,则需要使用json_encode)。

json_decode取回数组。

于 2015-11-28T13:31:38.227 回答
1
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;
}
于 2016-10-22T13:41:11.293 回答
0

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 ]
    );
}
于 2020-04-07T18:54:29.070 回答
0
$base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), );
$replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry'));
$basket = array_replace_recursive($base, $replacements);
$basket = array_replace($base, $replacements);
于 2021-09-13T01:48:53.817 回答