заменить строку в массиве с php - PullRequest
8 голосов
/ 12 февраля 2011

Как заменить подстроку другой строкой для всех элементов массива в php?Я не хочу использовать цикл, чтобы сделать это.Есть ли в php предопределенная функция, которая делает именно это?

Отредактировано: Спасибо за ваш ответ, еще один вопрос, как я могу это сделать с ключами массива?

Ответы [ 5 ]

65 голосов
/ 12 февраля 2011

Почему бы просто не использовать str_replace без цикла?

$array = array('foobar', 'foobaz');
$out = str_replace('foo', 'hello', $array);
17 голосов
/ 12 февраля 2011
$array = array_map(
    function($str) {
        return str_replace('foo', 'bar', $str);
    },
    $array
);

Но array_map - это просто скрытый цикл. Почему бы не использовать настоящий?

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

Это намного проще.

5 голосов
/ 13 ноября 2014

Это очень хорошая идея, которую я нашел и успешно использовал:

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

Хорошо и для многомерных массивов.

Если вы измените «true» на «false», он вернет объект вместо ассоциативного массива.

Источник: Кодовые ссылки

2 голосов
/ 28 ноября 2015

Я не уверен, насколько это эффективно, но я хотел заменить строки в большом многомерном массиве и не хотел перебирать все элементы, поскольку структура массива довольно динамична.

I сначала json_encode массив в строку

Заменить все строки, которые я хочу (нужно использовать preg_replace, если они не являются английскими символами, кодируемыми json_encode)

json_decode вполучить массив обратно.

1 голос
/ 22 октября 2016
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;
}
...