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

Форум PHP

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

 

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

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

тема: Подскажите с заменой по маске типа (.+)
 
 автор: Nekto   (04.12.2009 в 11:50)   письмо автору
 
 

День добрый :)

Подскажите, в чем ошибка:

Дано: строка вида ... {%some%} ...
Необходимо: заменить {%some%} на $array['some']

$find = array("'{%(.+)%}'i");
$replace = g_block("\\1"));
echo preg_replace($find, $replace, $what);

function g_block($i) {
    return $g_blocks[$i];
}

$g_blocks - массив с выборкой из БД по типу:
$g_blocks[$row['title']] = $row['code'];


В БД есть запись с title==header, code==123.
При попытке вывести $g_blocks['header'] / g_block($i = 'header') - результат есть "123", при выводе с помощью вышеописанного кода - результата нет...

З.Ы.: Так же при такой замене не работает switch(){}, поэтому подозреваю, что проблема в "формате" замены...

  Ответить  
 
 автор: Гость   (04.12.2009 в 14:43)   письмо автору
 
   для: Nekto   (04.12.2009 в 11:50)
 

-

  Ответить  
 
 автор: Саня   (04.12.2009 в 15:04)   письмо автору
 
   для: Nekto   (04.12.2009 в 11:50)
 

В массиве $g_blocks существует элемент с ключом "\\1"?

  Ответить  
 
 автор: Nekto   (04.12.2009 в 15:20)   письмо автору
 
   для: Саня   (04.12.2009 в 15:04)
 

Намек понятен.
Добавил в код
$g_blocks['\\1'] = 'qwe';

Стало выводить "qwe"... Но не понятно вот что:
return $i.' = '.$g_blocks[$i];

дает результат "some = qwe" (some - значение $i, определяемое при парсинге исходного текста ( {%some%} ), qwe - значение $g_blocks['\\1'], присвоенное позже, просто для проверки).. почему для вызова $i берется "some" (результат замены при парсинге), а для вызова элемента массива $g_blocks с индексом $i, значение $i=='\\1' ?

  Ответить  
 
 автор: Саня   (04.12.2009 в 15:55)   письмо автору
 
   для: Nekto   (04.12.2009 в 15:20)
 

Скорее всего вам нужно это:
<?
function g_block($i) { 
    
$g_blocks['some'] = 'lala';
    return 
$g_blocks[$i[1]]; 
}

$find = array("'{%(.+)%}'i"); 
$what 'fdlksflk jk {%some%} sdf ';
echo 
preg_replace_callback($find'g_block'$what);

  Ответить  
 
 автор: Nekto   (04.12.2009 в 16:07)   письмо автору
 
   для: Саня   (04.12.2009 в 15:55)
 

Спасибо, уже нашел :)
Только хотел отпостить, что решение найдено :)

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

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