从位置替换字符串中的数组

时间:2019-03-21 13:27:58

标签: php arrays replace

在将单词替换为特殊字符时遇到麻烦

首先,我阅读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);
?>

2 个答案:

答案 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>";
          }

    };