как использовать Str заменить в PHP - PullRequest
0 голосов
/ 26 октября 2019

Массив ([0] => Массив ([триггер] => E [alttext] => C) [1] => Массив ([триггер] => F [alttext] => D))

foreach ($trigger as $tdata) {
                $tr = $tdata['trigger'];
                $ttext = $tdata['alttext'];
                $text= str_replace($tr, $ttext, 'A B E F');
           //If im echo this result then result is 
           Result = A B C F A B E D

            }

И:

   foreach ($trigger as $tdata) {
                $tr = $tdata['trigger'];
                $ttext = $tdata['alttext'];
                $text= str_replace($tr, $ttext, 'A B E F');
                      }
            //If im echo this result then result is 
          Result = A B E D

Но я хочу показать A B C D

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 26 октября 2019

Я думаю, проблема в том, что вы всегда возвращаетесь к исходной строке, чтобы выполнить замену - вам необходимо внести накопительные изменения. Так что здесь он устанавливает $text с исходной строкой и каждый раз делает замены в этой строке ...

   $text = 'A B E F';
   foreach ($trigger as $tdata) {
       $tr = $tdata->trigger;
       $ttext = $tdata->alttext;
       $text= str_replace($tr, $ttext, $text);
    }

    echo $text;

Единственное, что вы должны быть осторожны с этим методом, это то, что если текстзаменить на более раннее - это то, что вы будете искать позже и заменить. Так что E -> F и F -> D будут A B D D.

Обновление:

С вашими тестовыми данными ...

$trigger = Array ( Array ( "trigger" => "E", "alttext" => "C" ) , 
    Array ( "trigger" => "F", "alttext" =>"D" ) );
$text = 'A B E F';
foreach ($trigger as $tdata) {
    $tr = $tdata['trigger'];
    $ttext = $tdata['alttext'];
    $text= str_replace($tr, $ttext, $text);
}

echo $text;
1 голос
/ 26 октября 2019

Учтите это (предполагая, что они похожи на строки вашей базы данных):

<?php
$rows = [
    ['E', 'C'],
    ['F', 'D']
];

foreach($rows as $row) {
    $find    = $row[0];
    $replace = $row[1];
    echo str_replace($find, $replace, 'A B E F');
}

Вывод:

A B C FA B E D

Мы можем сделать это за один проход с помощью следующих двух методов:

Вы можете передать str_replace два массива соответствующей находки и заменить:

echo str_replace(array_column($rows, 0), array_column($rows, 1), 'A B E F');

Выход:

A B C D

Или использовать strtr с массивом (от => до) (['E'=>'C', 'F'=>'D']):

  echo strtr('A B E F', array_column($rows, 1, 0));

Вывод:

A B C D

Вам придется создавать массивы поиска и замены и использовать один из тех методов, которые подходят. Обратите внимание, что есть небольшая разница в способах замены str_replace и strtr.

...