Заменить массив в строке из позиции - PullRequest
0 голосов
/ 21 марта 2019

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

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

Как изменить строку $ массивом специальных символов $ table по одному, например, на основе позиции, txt включает три слова:

pads
password 
qwerty

, поэтому программа должна показать

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

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

 <?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);
?>

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вместо 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>";
          }

    };
0 голосов
/ 21 марта 2019

Это должно сделать работу (еще не проверял):

$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, вы убедитесь, чтозаменяется только текущий символ, а не все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...