PHP-替换功能不适用于多次替换

时间:2018-08-05 12:22:31

标签: php

我有一个大问题。我必须在文本文件中用6个不同的单词更改6行,但是功能str_replace不起作用。为什么?

                    $prendo_link_per_replace = "ex.txt";                
                    $uno = "1";
                    $due = "2";
                    $tre = "3";
                    $quattro = "4";
                    $cinque = "5";
                    $sei = "6";
                    $testofile = file_get_contents($prendo_link_per_replace);
                    $testofile = str_replace($uno, $due, $testofile);
                    $testofile = str_replace($due, $tre, $testofile);
                    $testofile = str_replace($tre, $quattro, $testofile);
                    $testofile = str_replace($quattro, $cinque, $testofile);
                    file_put_contents($prendo_link_per_replace, $testofile);

我有2个文件:

  • check.php
  • text.txt

text.php中有:

  

1
  2
  3
  4
  5
  6

我发布的上一个代码将用下一个数字(2,3,4,5)替换数字1,2,3,4,但所有行的输出仅为5。我已经尝试过使用循环或fflush()或fwrite()或unset(),但输出不会改变。 运行代码后,我的页面text.txt更改为:

  

5
  5
  5
  5
  5
  6

为什么?有什么建议吗?
我正在使用Amazon Linux Ami 2,但是到处都无法正常工作。

真正的问题是我不能做多个str_replace。我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:1)

如果这是您的输入文件:

  

1
  2
  3
  4

您可以尝试以相反的顺序替换,例如

$file_name = "ex.txt";
$file_content = file_get_contents($file_name);
$one = "1";
$two = "2";
$three = "3";
$four = "4";
$five = "5";
$file_content = str_replace($four, $five, $file_content);
$file_content = str_replace($three, $four, $file_content);
$file_content = str_replace($two, $three, $file_content);
$file_content = str_replace($one, $two, $file_content);
file_put_contents($file_name, $file_content);

您的输出文件将是:

  

2
  3
  4
  5

答案 1 :(得分:1)

您可以使用str_replace(),而不是使用页面上有更换订单提示注释的strtr()。您可以在代码中看到我已将所有翻译构建到一个数组中,因此它们都可以同时完成,这还解决了根据替换顺序更改内容的问题。

$uno = "1";
$due = "2";
$tre = "3";
$quattro = "4";
$cinque = "5";
$sei = "6";
$testofile = file_get_contents($prendo_link_per_replace);
$trans = [$uno => $due, $due => $tre, $tre => $quattro, $quattro =>$cinque ];
$testofile = strtr($testofile, $trans );
file_put_contents($prendo_link_per_replace, $testofile);