Альтернатива для моего кода preg_replace - PullRequest
1 голос
/ 01 апреля 2010

Вот мой код ... в основном он находит любой номер страницы в переменной, а затем заменяет его на URL страницы из массива

$content_text = preg_replace("/page-(\d+)-/sie", '$pageurl[$1]', $content_text);

Работает до тех пор, пока НОМЕР не найдется в массиве и не выдаст ошибку ...

Есть ли другой эффективный способ сделать это вместо этого?

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

Ответы [ 4 ]

1 голос
/ 01 апреля 2010

Синтаксис может быть не на 100% правильным, но;

$content_text = preg_replace_callback('/page-(\d+)-/sie',
    create_function('$number',
                    'global $pageurl;
                    if (in_array($number, $pageurl)){
                        return $pageurl[$number];
                    }else{
                        /*do something*/
                    };'),
    $content_text);

РЕДАКТИРОВАТЬ Забыли включить "global $ pageurl;" чтобы иметь возможность доступа к переменной внутри функции.

0 голосов
/ 01 апреля 2010
foreach ($pageurl AS $num => $url) {
    $search[] = "/page-({$num})-/sie";
    $replace[] = $url;
}
$content_text = preg_replace($search, $replace, $content_text);
0 голосов
/ 01 апреля 2010

Почему бы вам не получить числа с помощью preg_match_all, создать массив замены на основе полученных вами чисел, а затем запустить str_replace с этими массивами. Таким образом, вы можете обеспечить замену 1-1.

0 голосов
/ 01 апреля 2010

Добавьте проверку в замену, чтобы увидеть, существует ли элемент в массиве или нет. Может быть легче читать, если вы поместите код в функцию и используете preg_replace_callback вместо флага e.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...