Использовать массивы из базы данных для str_replace ($ search, $ replace, $ string) - с динамическими значениями - PullRequest
0 голосов
/ 22 января 2019

Если я определю встроенный массив в моем исходном коде, он будет работать.Но как я могу использовать имена переменных из базы данных?

Пока я разрабатывал этот код, я использую встроенный определенный массив.Но теперь я хочу получить элементы $search и $replace из базы данных.

Моя проблема : {var} больше не заменяется значением $var, а строкой "$var".

$template_tags = array(
    '{order_id}',
    '{customer_id}'
);

$replacements = array(
    $insert_id,
    $mail_customer_id
);

// works: str_replace($template_tags, $replacements, $source) is for example "The Customer 0123 has the Order-ID 0987"

Но если яполучить $template_tags и $replacements (ТОЛЬКО имена переменных, значения переменных устанавливаются ранее в исходном коде) из базы данных. Результат:

"The Customer $mail_customer_id has the Order-ID $insert_id"

Моя цель - получить переменнуюимена из базы данных, и они заменяются - до того, как определены - значения

Мой результат БД:

Array ( [0] => {order_id} 
        [template_tag] => {order_id} 
        [1] => $order_id 
        [replacement] => $order_id ) 
Array ( [0] => {customer_id} 
        [template_tag] => {customer_id} 
        [1] => $customer_id 
        [replacement] => $customer_id )

edit:

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

while ($value = mysqli_fetch_array($replacement_tags_query)) {
    $replacements[] = $value['replacement'];
    $template_tags[] = $value['template_tag'];
}
$str = str_replace($template_tags, $replacements, $testtext);
eval ("\$str = \"$str\";");
echo $str;

1 Ответ

0 голосов
/ 22 января 2019

Обратите внимание, что возвращаемое вами значение из БД является строкой: как '$order_id', поэтому они не оцениваются в коде.

Если вы хотите, чтобы значение было установлено динамически, вы можете использовать переменную PHP способностей. Так что все, что вам нужно, это удалить знак '$' из вашей БД и сделать что-то вроде:

while ($value = mysqli_fetch_array($replacement_tags_query))
{
    $replacements[] = ${$value['replacement']};
    $template_tags[] = $value['template_tag'];
}

Теперь вы можете использовать это с: str_replace($template_tags, $replacements, $string)

...