Заменить массив в строке из позиции

#php #arrays #replace

#php #массивы #заменить

Вопрос:

У меня возникают проблемы при замене слова на специальные символы

Сначала я читаю текстовый файл и сохраняю каждую строку в $line и помещаю специальный символ, который я хочу изменить, в $table array.

Как мне изменить $ line на специальный символ $table array один за другим в зависимости от позиции, например, текст содержит три слова:

 pads
password 
qwerty
  

таким образом, программа должна показывать

 p@ds
p@d$
p@ssword
p@$sword
p@$$word
p@$$w0rd
qwerty
  

Теперь моя работа просто изменяет все специальные символы на новое слово.
но как изменить это, используя цикл foreach / for один за другим в зависимости от позиции
Мой код выглядит следующим образом

  <?php

    $file = fopen("text.txt", "r"); 
    while(!feof($file)) {
    $line = fgets($file);  
    $line = rtrim ($line);    

    $table = array(
        'a'=>'@', 'o'=>'0', 's'=>'$',   
    );


    $length = strlen($line);
    for ($i=0 ; $i<$length ; $i  ){ 
        $line = strtr ($line, $table);
        echo $line."<br>";
    };
    }
    fclose($file);
?>
  

Ответ №1:

Это должно выполнить задание (не тестировал):

 $char_array = str_split($line);
$replaced = FALSE;
foreach($char_array as $char) {
    if(array_key_exists($char, $table)) {
        $line = str_replace($char, $table[$char], $line, 1);
        echo $line."<br>";
        $replaced = TRUE;
    }
}
if(!$replaced)
    echo $line."<br>";
  

Устанавливая для аргумента count str_replace значение 1, вы убедитесь, что заменяется только текущий символ, а не все из них.

Ответ №2:

Вместо strtr() используйте preg_replace() вот так:

     for ($i=0 ; $i<$length ; $i  ){ 
          if (array_key_exists($line[$i], $table)) {
             $line = preg_replace('/' . $line[$i] . '/', $table[$line[$i]], $line, 1);
             echo $line."<br>";
          }

    };