|
|
|
| День добрый :)
Подскажите, в чем ошибка:
Дано: строка вида ... {%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(){}, поэтому подозреваю, что проблема в "формате" замены... | |
|
|
|
|
|
|
|
для: Nekto
(04.12.2009 в 11:50)
| | - | |
|
|
|
|
|
|
|
для: Nekto
(04.12.2009 в 11:50)
| | В массиве $g_blocks существует элемент с ключом "\\1"? | |
|
|
|
|
|
|
|
для: Саня
(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' ? | |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: Саня
(04.12.2009 в 15:55)
| | Спасибо, уже нашел :)
Только хотел отпостить, что решение найдено :) | |
|
|
|