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

Форум Регулярные Выражения

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

 

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

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

тема: Подстановка элемента массива...
 
 автор: DustDevil   (22.04.2008 в 18:16)   письмо автору
 
 

Есть задачка:
Есть некий массив:
$arr[key1] = value1
$arr[key2] = value2 и так далее....

И есть некий html, в котором переодически попадается нечто вида:
<td><%key1%></td>
<div><%key2%> еще какой-то текст</div> и прочее....

Задача: поменять все эти <%какой-то там КЕЙ%> на вполне конкретное значение из массива, соответствующее этому ключу.

Заранее благодарен за помощь.

   
 
 автор: AcidTrash   (22.04.2008 в 21:39)   письмо автору
 
   для: DustDevil   (22.04.2008 в 18:16)
 

Если возможно с примерами, чтобы можно было смоделировать ситуацию, а то не очень понятно.

   
 
 автор: Shecspi   (22.04.2008 в 21:58)   письмо автору
 
   для: 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 );

А вот как получившееся значение вставить ключом в массив - не знаю, уж извини.

   
 
 автор: AcidTrash   (22.04.2008 в 22:50)   письмо автору
 
   для: Shecspi   (22.04.2008 в 21:58)
 

Чушь, вы сами то поняли, что написали? Автору нужно другое, поэтому еще раз вопрос к автору.

   
 
 автор: DustDevil   (23.04.2008 в 11:06)   письмо автору
 
   для: 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%>.... Мой код подставляет пустоту.

   
 
 автор: AcidTrash   (23.04.2008 в 12:00)   письмо автору
 
   для: 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 не виден в функции, потому-что вы его не объявили как глобальный.

   
 
 автор: DustDevil   (23.04.2008 в 14:23)   письмо автору
 
   для: AcidTrash   (23.04.2008 в 12:00)
 

Спасибо, заработало!

   
Rambler's Top100
вверх

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