在将单词替换为特殊字符时遇到麻烦
首先,我阅读txt文件并将每一行存储到$ line中 并将要更改的特殊字符放入$ table数组。
如何根据位置来一一更改具有特殊字符$ table数组的$ line,例如txt包含三个词:
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);
?>
答案 0 :(得分:0)
这应该可以完成工作(尚未测试):
$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>";
通过将str_replace的 count 参数设置为1,可以确保仅替换当前字符,而不替换所有字符。
答案 1 :(得分:0)
代替 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>";
}
};