PHP Как автоматически считать входные значения и заменить их регулярным выражением? - PullRequest
0 голосов
/ 03 мая 2019

Я установил функцию для замены {1} на $param1 следующим образом:

<?php
$lang = '{1} say not exist!';
$replaceParam = 'aaa';
function languageParam($value, $param)
{
    $value = preg_replace("/\{(.+?)\}/s", $param, $value);
    return $value;
}

echo languageParam($lang, $replaceParam );

Я хочу знать, возможно ли заменитьстрока в этом определенном формате:
{numbers}
Примерно так:

<?php
$lang = '{1} say {2} not exist!';
$param = array(
    '1' => 'aaa',
    '2' => 'bbb'
);

Я имею в виду, как заставить функцию рассчитывать входной массив и заменять их числами?

Например:

<?php
$lang = '{1} say {2} {3} {4}'; //maybe have {5}, {6}...etc
$param = array(
    '1' => 'aaa',
    '2' => 'bbb',
    '3' => 'ccc',
    '4' => 'ddd'
//and '5', '6'...etc
);

И он выдаст

aaa say bbb ccc ddd //....and more

Возможно ли это?Или это может работать, но будет стоить много времени, чтобы посчитать и найти строки?

1 Ответ

1 голос
/ 03 мая 2019

Вы хотите перебрать массив, а затем выполнить замену строки для значения, которое нужно заменить, используя индекс массива:

<?php
$lang = '{1} say {2} {3} {4}'; 
$param = array(
    '1' => 'aaa',
    '2' => 'bbb',
    '3' => 'ccc',
    '4' => 'ddd'
);

foreach($param as $index => $p) {
  $lang = str_replace('{' . $index . '}', $p, $lang);
}

echo $lang; //aaa say bbb ccc ddd

Лично я бы использовал квадратные скобки ...

<?php
$lang = '[1] say [2] [3] [4]'; 
$param = array(
    '1' => 'aaa',
    '2' => 'bbb',
    '3' => 'ccc',
    '4' => 'ddd'
);

foreach($param as $index => $p) {
  $lang = str_replace("[$index]", $p, $lang);
}

echo $lang; //aaa say bbb ccc ddd

Тогда вы можете не разбивать строку.

Со строковыми индексами и цифрами:

<?php

$lang = '{char_1} say {2} {char_3} {4}'; 
$param = array(
    'char_1' => 'aaa',
    '2' => 'bbb',
    'char_3' => 'ccc',
    '4' => 'ddd'
);

foreach($param as $index => $p) {
  $lang = str_replace('{' . $index . '}', $p, $lang);
}

echo $lang; //aaa say bbb ccc ddd
...