preg_replace_callback

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 13 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    Подскажите пожалуйста, как в
    PHP:

    preg_replace_callback 
    ($regex"funct" ,$string);
    Как в функцию funct передать переменную $a?
     
  2. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Вариант 1: простой
    PHP:
    function funct($matches){
        global 
    $a;
        return 
    '';
    }
    preg_replace_callback($regex"funct"$string);
    Вариант 2: правильный
    PHP:
    class MyClass{
        private 
    $a;
        public function 
    setA($a){
            
    $this->$a;
        }
        public function 
    funct($matches){
            
    $this->a// то самое значение
            
    return '';
        }
    }
    $cb = new MyClass;
    $cb->setA($a); // передаём значение
    preg_replace_callback($regex, array($cb'funct'), $string);
     
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    PHP:
    function funct ()
    {
    return 
    $str;
    }
    for (
    $i=1;$i<=5;$i++){
    $a="a$i";
    global 
    $a;
    preg_replace_callback($regex"funct"$string);  
    Один раз отрабатывает нормально, а затем не хочет добавлять +1 в переменную "а" и эта переменная вообще пустая потом становится.
     
  4. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    global вне функции смысла не имеет. Что требуется от этого кода тоже совсем не понятно ))
     
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Необходимо передать переменную $i из основного кода, в функцию.
    Перменная $i участвует в цикле фор, т.е. необходимо пять раз передать перменную $i.
     
  6. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Может всё-таки перенести оператор global в функцию, как в моём примере?)
     
  7. Holy Diver

    Holy Diver Создатель

    Регистр.:
    17 авг 2009
    Сообщения:
    22
    Симпатии:
    8
    В данном примере не вижу причин использовать preg_replace_callback, хватит обычного preg_replace.
    PHP:
    function funct($str) {
        return 
    $str;
    }

    for(
    $i=1$i<=5$i++) {
    $a'a'.$i;
    $string preg_replace($regexfunct($a), $string);
    }
     
  8. Holy Diver

    Holy Diver Создатель

    Регистр.:
    17 авг 2009
    Сообщения:
    22
    Симпатии:
    8
    Не знаю, актуально или нет, но нашёл такую инфу:

     
  9. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Почти правильно:D Не, ошибок нет, и под ТЗ попадает, но ты уверен что человеку нужно именно то, что ты написал ?
    Скорее всего нужен модификатор е: подробнее в хелпе
    PHP:
    preg_replace("/(\w+)/e"
                  
    "FUNCTION('$a', '\\1')"
                  
    $html_body);
     
    uadesign нравится это.
Статус темы:
Закрыта.