在PHP中用数组替换文件中的字符串

时间:2014-02-23 15:20:58

标签: php regex arrays foreach

这是一个棘手的问题...我试图替换我在数组中保存的文件中的一些字符串。 因为有很多文件......我一直在努力找到最快的方法。 我试过这个(虽然有效),但速度很慢。

  • 首先解析所有文件并获得我想要的值数组 改变(比方说500)。
  • 然后我写了一个 foreach 循环来逐个解析文件。
  • 然后在其中,另一个foreach 循环逐个遍历值 preg_replacing 任何出现的数组值的文件。

这需要永远,因为并非所有文件都需要使用500个数组元素进行解析。 所以我现在正在改变代码:

  • 解析每个文件并创建一个我想要替换的值的数组。
  • 再次搜索文件,查找每个阵列值的所有匹配项并替换它。
  • 保存文件

我认为这将比旧方式快得多......我现在遇到的问题是读/写循环和数组循环...... 我想尽快做到这一点...因为会有很多文件要解析,有些文件有100多个值。 到目前为止,我在一个函数中得到了这个。

function openFileSearchAndReplace($file)
{
  $holdcontents = file_get_contents($file);
  $newarray = makeArrayOfValuesToReplace($holdcontents);
  foreach ($newarray as $key => $value) {
    $replaceWith = getNewValueFor($value);
    $holdcontent = preg_replace('/\\b'.$value.'\\b/', $replaceWith, $holdcontents);
   }
   file_put_contents($file, $holdcontent, LOCK_EX);  //Save and close
}

现在,这不起作用......它只是改变了1个值,因为我在foreach之外有 file_put_contents file_get_contents 。 (更不用说它取代了它不应该替换的值。可能导致读/写在循环之外。)我必须把它们放在里面工作..但那会很慢..因为它需要3-4秒文件进行更改,因为数组中有很多元素。

我如何“打开文件”,“读取它”,“首先更改所有值”,“然后保存关闭文件”,这样我就可以移动到下一个。

修改 也许我不是很好地解释它我不知道......或者这太复杂了......我必须解析一系列价值观......我无法避免这种情况......而不是(在每一个循环),我打开文件搜索并替换1值,关闭文件.....我想这样做: 打开文件,获取数组或字符串中的内容或其他内容。对于所有值,我一直用等效值替换文本,并且当所有值都完成时...该数组或字符串写入文件。所以我只打开/关闭文件一次。

,而不是等待php一直读/写/关闭

-Thanks

2 个答案:

答案 0 :(得分:0)

如何使用str_replace(混合$ search,混合$ replace,混合$ subject)?

您可以拥有一系列搜索字符串,这些搜索字符串将替换为替换数组中的相应项目,并且正如PHP手册所述:

  

如果您不需要花哨的替换规则(如正则表达式),则应始终使用此函数而不是preg_replace()。

也只需关闭文件并使用'w'模式重新打开它。文件将被截断为0长度

添加了修改

$fileContents = file_get_contents("theFile");
$search = array('apples', 'oranges');
$replace = array('pears', 'lemons');
$newContents = str_replace($search, $replace, $fileContents);
$handle = fopen("theFile","w");
fwrite($handle, $newContents);
fclose($handle);

这就是你的文件将所有旧字符串替换为新字符串。

答案 1 :(得分:0)

这个问题没有解决办法。 file_get_contents和file_put_contents根本不起作用。 我感谢大家对这个问题的关注。