用PHP替换数组中的字符串

用PHP替换数组中的字符串,php,arrays,str-replace,replace,Php,Arrays,Str Replace,Replace,在PHP中,如何用其他字符串替换数组中所有项的子字符串 我不想用循环来做这件事。在PHP中是否有一个预定义的函数可以做到这一点 如何在数组的键上执行此操作 $array = array_map( function($str) { return str_replace('foo', 'bar', $str); }, $array ); 但这只是一个隐藏的循环。为什么不用真的呢 foreach ($array as &$str) { $str

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

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

如何在数组的键上执行此操作

$array = array_map(
    function($str) {
        return str_replace('foo', 'bar', $str);
    },
    $array
);
但这只是一个隐藏的循环。为什么不用真的呢

foreach ($array as &$str) {
    $str = str_replace('foo', 'bar', $str);
}
那就容易多了。

为什么不直接使用无循环的系统呢

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

这是一个非常好的想法,我发现并成功地使用了:

function str_replace_json($search, $replace, $subject) 
{
    return json_decode(str_replace($search, $replace, json_encode($subject)), true);
}
它也适用于多维数组

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


来源:

我不确定这是否有效,但我想在一个大的多维数组中替换字符串,并且不想遍历所有项,因为数组结构是非常动态的

我首先将数组编码成一个字符串

替换我想要的所有字符串(如果存在由
json\u encode
编码的非英语字符,则需要使用
preg\u Replace

json\u解码
以取回数组。

函数my\u replace\u数组($array,$key,$val){
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;
}

对于($i=0;$i带
数组\u walk\u recursive()


为什么不想使用循环?听起来更像是一时兴起,而不是明智的理由@edit:在数组前后使用
array\u flip
,让其他代码保持原样。可能重复的供参考。真正的答案在底部。PHP的
str\u replace
已经可以做到这一点。我很奇怪,OP为什么不接受这个。他似乎真的不知道自己在问什么。而且不仅这个答案是not被接受为正确答案,它是我所有答案的底部…(我正在使用active搜索序列)当我尝试使用解码的JSON数组时,我得到一个错误
PHP可捕获致命错误:stdClass类的对象无法转换为字符串
我对PHP非常陌生,到目前为止似乎很难编辑数组。@Dennis:
JSON\u decode
默认情况下返回一个对象,而不是数组,除非您明确指定需要一个数组堆栈溢出逻辑:将投票最多的答案推到最底部。好的,我尝试了第二个选项,但是在$str之前没有&sign,它就不起作用了。但是为什么&sign,在这种情况下&sign是什么意思?
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 ]
    );
}