|
|
|
| Есть задачка:
Есть некий массив:
$arr[key1] = value1
$arr[key2] = value2 и так далее....
И есть некий html, в котором переодически попадается нечто вида:
<td><%key1%></td>
<div><%key2%> еще какой-то текст</div> и прочее....
Задача: поменять все эти <%какой-то там КЕЙ%> на вполне конкретное значение из массива, соответствующее этому ключу.
Заранее благодарен за помощь. | |
|
|
|
|
|
|
|
для: DustDevil
(22.04.2008 в 18:16)
| | Если возможно с примерами, чтобы можно было смоделировать ситуацию, а то не очень понятно. | |
|
|
|
|
|
|
|
для: AcidTrash
(22.04.2008 в 21:39)
| | Ну а что именно не понятно? Имеется строка
$string = "<td><%key1%></td><div><%key2%></div>";
| Имеется массив
$arr = array ("key1" => "value1", "key2" => "value2" );
| Необходимо заменить <%key1%> на $arr['key1'].
Автору:
шаблон будет следующим :
$pattern = "|<%key([0-9]+?)%>|";
$string = preg_replace ( $pattern, "key$1", $string );
|
А вот как получившееся значение вставить ключом в массив - не знаю, уж извини. | |
|
|
|
|
|
|
|
для: Shecspi
(22.04.2008 в 21:58)
| | Чушь, вы сами то поняли, что написали? Автору нужно другое, поэтому еще раз вопрос к автору. | |
|
|
|
|
|
|
|
для: AcidTrash
(22.04.2008 в 22:50)
| | Хорошо, пример чтобы было понятно:
HTML файл:
<html>
<body>
<table id='mainframe'>
<tr>
<td name='menu'><%menu%></td>
<td name='work_area'><%work_area%></td>
<tr>
</table>
</body>
|
Кусок php файла:
$arr['menu'] = "Тут должны отображатся элементы меню.";
$arr['work_area'] = "Тут должен отображатся контент";
$template_file = 'templates/index.htm';
$template = fopen($template_file, "r");
$buffered_template = fread($template, filesize($template_file));
fclose($template);
$patern = "/<%.*%>/";
$line = preg_replace_callback(
$patern,
create_function(
'$matches',
'return $arr[$matches[0]];'
),
$buffered_template
);
echo $line;
|
Собственно должно вместо <%menu%> подставится "Тут должны отображатся элементы меню.", и аналогично для <%work_area%>.... Мой код подставляет пустоту. | |
|
|
|
|
|
|
|
для: DustDevil
(23.04.2008 в 11:06)
| | Замените ваш preg_replace_callback на
$patern = "/<%(.+?)%>/";
$line = preg_replace_callback(
$patern,
create_function(
'$matches',
'global $arr; return $arr[$matches[1]];'
),
$buffered_template
);
|
У вас массив $arr не виден в функции, потому-что вы его не объявили как глобальный. | |
|
|
|
|
|
|
|
для: AcidTrash
(23.04.2008 в 12:00)
| | Спасибо, заработало! | |
|
|
|