Проблемы с использованием индексированных массивов с preg_replace () PHP - PullRequest
0 голосов
/ 19 августа 2010

Впервые я пишу здесь и надеюсь, что кто-нибудь сможет мне помочь.

У меня есть файл, нумерация которого начинается с 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 голосов
/ 19 августа 2010

Ваш массив шаблонов выглядит следующим образом:

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

Вам необходимо использовать двойные кавычки в строке 7:

$patterns[$i] = "/$i/";
0 голосов
/ 19 августа 2010

Не беспокойтесь о регулярных выражениях для такого простого случая ... Просто используйте 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, если шаблоны более сложные (например, только поиск начала строки и т. Д.) ... Но для такого простого шаблона это не стоит (ИМХО) ...

0 голосов
/ 19 августа 2010

Это не сработает?

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

Кажется странным, что вы хотите изменить их "на месте".

...