Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: preg_replace_callback и create_function
 
 автор: ntro123   (12.03.2013 в 22:12)   письмо автору
 
 

Не могу передать значение глобального массива индекс является значение найденной цифры.

<?php
$gv
=array('@1','@2','@3','@4','@5','@6','@7','@8','@9');
$q1='314561541';

preg_replace_callback("#([0-3])#"create_function('$matches','exit($gv[$matches[1]]);'), $q1);

?>


Должно вывести '@3', но выдаст ошибку.

  Ответить  
 
 автор: Drago   (13.03.2013 в 01:25)   письмо автору
 
   для: ntro123   (12.03.2013 в 22:12)
 

<?
preg_replace_callback
("#([0-3])#"create_function('$matches','
    global $gv;
    exit($gv[$matches[1]]);
'
), $q1);

  Ответить  
 
 автор: ntro123   (13.03.2013 в 07:59)   письмо автору
 
   для: Drago   (13.03.2013 в 01:25)
 

Извиняюсь, кое что напутал. Если быть точнее то весь этот код находиться внутри функции:


<?php
function qwe()
{
    
$gv=array('@1','@2','@3','@4','@5','@6','@7','@8','@9'); 
    
$q1='314561541'
    
    
preg_replace_callback("#([0-3])#"create_function('$matches',
        global $gv; 
        exit($gv[$matches[1]]); 
    '
), $q1);
}
qwe();
?>


Без функции работает, как только внутрь функцию засунуть перестает.

  Ответить  
 
 автор: Igorek   (13.03.2013 в 12:05)   письмо автору
 
   для: ntro123   (13.03.2013 в 07:59)
 

Если PHP>=5.3.0 :
<?php
preg_replace_callback
("#([0-3])#", function($matches) use($gv) {
  return 
$gv[$matches[1]];
}, 
$q1);


Иначе, можно $gv внутрь анонимной функции поставить:
<?php
preg_replace_callback
("#([0-3])#"create_function('$matches'
'$gv=array("@1","@2","@3","@4","@5","@6","@7","@8","@9"); 
return $gv[$matches[1]];'
)
$q1); 


И, не самый лучший вариант, принудительно в глобальную область видимости $gv присвоить:
<?php
    $GLOBALS
['gv']=array("@1","@2","@3","@4","@5","@6","@7","@8","@9");
    
$q1='314561541';  
    
    
$r2 preg_replace_callback("#([0-3])#"create_function('$matches'
            
'global $gv; 
              return $gv[$matches[1]];'
)
          , 
$q1);

  Ответить  
 
 автор: Igorek   (13.03.2013 в 12:21)   письмо автору
 
   для: ntro123   (13.03.2013 в 07:59)
 

Кстати, интересно как передать переменную в анонимную функцию в данном случае, если эта переменная не в global scope?

  Ответить  
 
 автор: ntro123   (13.03.2013 в 19:04)   письмо автору
 
   для: Igorek   (13.03.2013 в 12:21)
 

Спасибо все работает.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования