Заменить часть строки массива php

506
11 января 2017, 04:09

Здравствуйте. В интернете есть туча примеров как заменить значения одного массива на другое. Но нигде (за несколько часов) я не нашёл, как же в массиве заменить только те значения, которые соответствуют определённым критериям.

Вот функции array_replace или str_replace могут заменить значения одного массива Array(0=>'odin',1=>'dva',2=>'tri'); на другое Array(0=>'one',1=>'two',2=>'three');

Но я никак не могу понять, как же заменить только часть строки, чтоб получилось примерно так:

// было так
Array(0=>'odin',1=>'dva',2=>'tri');
// а хочу получить так
Array(0=>'o(d)[i]n',1=>'(d)va',2=>'tr[i]');

Т.е. букву i заменить на [i], а букву d заменить на (d)

Единственный вариант, который я могу реализовать, такой (но хотел бы вариант, с регулярками):

foreach(Array(0=>'odin',1=>'dva',2=>'tri')as$y=>$z)
{
    // дальше с каждым значением работать отдельно,
    // а после всё собирать в отдельный массив
}
Answer 1

Use the array_map function, Luke!

$arr = ['odin', 'dva', 'tri'];
// array_map проходится по массиву, заменяя значения на возвращённое значение
$arr = array_map(function($el){
  // Заменяем все d и i
  return preg_replace_callback("/d|i/", function($found){
    return $found[0] === 'd' ? '(d)' : '[i]';
  }, $el);
}, $arr);
var_dump($arr);

https://repl.it/FEIG/0

Answer 2

Use str_replace;

$arr = Array(0=>"odin",1=>"dva",2=>"tri");
foreach ($arr as $r=>$z) 
{
  $arr[$r] = str_replace("i","[i]",$z);
  $arr[$r] = str_replace("d","(d)",$arr[$r]);
}
READ ALSO
Подключение RedBeanPHP on line 6737

Подключение RedBeanPHP on line 6737

Добрый день уважаемые, только начал осваивать данную ORV библиотеку и столкнулся с проблемой что она не хочет у меня подключатьсяНе могу понять...

423
Ограничение ресурсов сервера в PHP

Ограничение ресурсов сервера в PHP

Здравствуйте, господа

327
Как добавить вторую переменную

Как добавить вторую переменную

С массивом $array все работает верно, добавляется определенное количество строк и заносится в каждую строку ячейка со значением $array = $_POST[form_text_o];...

401
Вопрос по for и break

Вопрос по for и break

Если писать так:

350