使用带有preg_replace()PHP的索引数组时遇到问题

时间:2010-08-19 14:20:56

标签: php arrays preg-match

我第一次在这里发帖,希望有人能帮助我。

我有一个文件,编号从610开始,然后继续到1019.我想使用PHP的preg_match()函数从0开始编号,然后一直持续到410.

以下是我一直在研究的一些代码。但是我无法获得替换数字的功能。我不知道为什么,我也没有任何错误。

<?php

$string = "610 611 612 613 614 615 616 617"; //this isnt the actual file but will do. The actual file is more complicated. This is just a test string.

$patterns = array();
for ($i=610; $i<1020; $i++) {
    $patterns[$i] = '/$i/';
}

$replacements = array();
for ($j=1; $j<410; $j++) {
    $replacements[$j] = '\r\n' . $j;
}

$newText = preg_replace($patterns, $replacements, $string);
echo $newText;

?>

我使用示例#2格式http://www.php.net/manual/en/function.preg-replace.php作为参考。

提前感谢您的任何帮助:)

3 个答案:

答案 0 :(得分:0)

这不行吗?

implode(" ", range(0, 410))

你想“就地”改变它们似乎很奇怪。

答案 1 :(得分:0)

您的“模式”数组如下所示:

$patterns (
   610 => '/$i/',
   611 => '/$i/',
...
}

您需要在第7行使用双引号:

$patterns[$i] = "/$i/";

答案 2 :(得分:0)

对于这样一个简单的案例,不要为正则表达式而烦恼...只需使用str_replace。它会更快,相当于你现在的代码......

$patterns = array();
for ($i=610; $i<1020; $i++) {
    $patterns[] = $i;
}

$replacements = array();
for ($j=1; $j<410; $j++) {
    $replacements[] = '\r\n' . $j;
}

$string = str_replace($patterns, $replacements, $string);

现在,如果模式更复杂(例如只搜索行的开头等),你仍然需要使用preg_replace ...但是对于这样一个简单的模式,它是不值得的(恕我直言) ...