#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>";
}
};