Trouble using indexed arrays with preg_replace() PHP
First time i post here an开发者_如何学God hope somebody will be able to help me.
I have a file whos numbering starts at 610 and goes on to 1019. I want to use PHP's preg_match() function to start the numbering from 0 and go on till 410.
Here is some code i've been working on. But i cant get the function to replace the numbers. I don't know why and i don't get any errors.
<?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;
?>
I used Example #2 form http://www.php.net/manual/en/function.preg-replace.php as reference.
Thanks in advance for any help :)
This won't do?
implode(" ", range(0, 410))
It seems odd that you want to change them "in place".
Your "patterns" array looks like this:
$patterns (
610 => '/$i/',
611 => '/$i/',
...
}
You need to use double quotes on line 7:
$patterns[$i] = "/$i/";
Don't bother with regular expressions for such a simple case... Simply use str_replace. It'll be faster, and equivalent to your present code...
$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);
Now, you'd still need to use preg_replace if the patterns are more complicated (such as only searching for the start of the line, etc)... But for such a simple pattern, it's not worth it (IMHO)...
精彩评论