用PHP替换数组中的字符串[已关闭]

rryofs0p  于 2023-04-10  发布在  PHP
关注(0)|答案(8)|浏览(93)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

昨天关门了。
社区昨天审查了是否重新打开这个问题,并将其关闭:
不适合本网站
Improve this question
如何用其他字符串替换PHP数组中所有元素的子字符串?
我不想用循环来实现,PHP中有没有一个预定义的函数可以实现这一点?
我怎么能在数组的键上做到这一点呢?

wwwo4jvm

wwwo4jvm1#

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

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

pbpqsu0x2#

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

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

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

那就简单多了

uklbhaso

uklbhaso3#

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

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

它也适用于多维数组。
如果你将“true”改为“false”,那么它将返回一个对象而不是一个关联数组。
来源:Codelinks

km0tfn4u

km0tfn4u4#

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;
}
l7mqbcuq

l7mqbcuq5#

我不确定这有多有效,但我想替换一个大的多维数组中的字符串,并且不想循环遍历所有项,因为数组结构非常动态。
我先把数组json_encode转换成一个字符串。
替换我想要的所有字符串(如果有非英文字符由json_encode编码,则需要使用preg_replace)。
json_decode来取回数组。

aelbi1ox

aelbi1ox6#

关于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 ]
    );
}
dzjeubhm

dzjeubhm7#

这将替换所有元素,即使有对象:

<?php

class Arrays {
    /**
     * Replaces in all strings within a multidimensional array, even if objects are included
     * @param  string $search       search for this string
     * @param  string $replace_with replace with this string
     * @param  mixed $mixed        Array or Object to search in all elements
     * @return mixed               gives the same structure back
     */
    public static function replace_everywhere($search, $replace_with, $mixed) {
        if (is_array($mixed)) {
            // Arrays
            foreach ($mixed as &$value) {
                $value = Arrays::replace_everywhere($search, $replace_with, $value);
            }
            return $mixed;
        } elseif (is_object($mixed)) {
            // Objects
            foreach ($mixed as $key => &$value) {
                $value = Arrays::replace_everywhere($search, $replace_with, $value);
            }
            return $mixed;
        } elseif (is_string($mixed)) {
            // replace in a string element
            return str_replace($search, $replace_with, $mixed);
        } else {
            // other datatypes stay untouched
            return $mixed;
        }
    }
}

你可以这样称呼它。

$a =  Arrays::replace_everywhere("<", "&lt;", $a);
tf7tbtn2

tf7tbtn28#

$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);

相关问题