Как заменить цифры из массива

215
30 марта 2019, 00:30

голову уже сломал есть массив $arr = array('a'=>'01','A'=>'02','g'=>'03','e'=>'04','c'=>'05','d'=>'06','V'=>'07','O'=>'08','K'=>'09','X'=>'11','F'=>'12','T'=>'13','h'=>'14','n'=>'15','B'=>'16','Q'=>'17','M'=>'18','t'=>'19');

есть значение

$str = '204114214206109209209';

Делал так но не работает как надо

$str = strtr($str, array_flip($arr));

Проблема в том что нужно чтобы он заменял в тексте только цифры из 3 только 2,3, т.е. вот так

2 04 1 14 2 14 2 06 1 09 2 09 2 09

на выходе должно быть так

2 e 1 h 2 h 2 d 1 K 2 K 2 K

возможно тут надо регуляркой делать замену, но вот с ней у меня беда(

Answer 1

возможно тут надо регуляркой делать замену

Можно просто в цикле собрать строку для передачи в strtr():

$arr = array(
    'a' => '01',
    'A' => '02',
    'g' => '03',
    'e' => '04',
    'c' => '05',
    'd' => '06',
    'V' => '07',
    'O' => '08',
    'K' => '09',
    'X' => '11',
    'F' => '12',
    'T' => '13',
    'h' => '14',
    'n' => '15',
    'B' => '16',
    'Q' => '17',
    'M' => '18',
    't' => '19'
);
$str = '204114214206109209209';
$new = '';
foreach (str_split($str) as $i => $char) {
    $new .= --$i % 3 ? "$char " : $char;
}
$str = strtr($new, array_flip($arr));
echo $str;

Результат:

2 e 1 h 2 h 2 d 1 K 2 K 2 K
Answer 2
$arr = array('a'=>'01','A'=>'02','g'=>'03','e'=>'04','c'=>'05','d'=>'06','V'=>'07','O'=>'08','K'=>'09','X'=>'11','F'=>'12','T'=>'13','h'=>'14','n'=>'15','B'=>'16','Q'=>'17','M'=>'18','t'=>'19');
$str = '204114214206109209209';
$arr_str = str_split($str, 3);
$result = "";
foreach($arr_str as $str){
   $num = (int)$str[0];
   $str = strtr(substr($str, 1), array_flip($arr));
   $result .= "{$num}{$str}";
}
var_dump($result);

Вывод :

string(14) "2e1h2h2d1K2K2K"
READ ALSO
C++ Пример использования деструктора

C++ Пример использования деструктора

Если я создаю обьект класса:

176
Алгоритм обхода объектов

Алгоритм обхода объектов

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

183
Скорость переадресации функций

Скорость переадресации функций

Что лучше в плане быстродействия: вызывать члены класса, наследованные из другого класса, или вызывать члены класса, полученные из хранящегося...

181
Найти все простые числа в диапазоне [A; B]

Найти все простые числа в диапазоне [A; B]

Найти все простые числа в диапазоне от А до В (1 <= A <= B <= 10^12 ), при условии, что В - А >= 10 ^ 6Уже 4 день ломаю над этим голову

232