Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> параметризованные строки, как распарсить строку и подставить п-ры 
:(
    Опции темы
zone51
  Дата 4.11.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Привет всем! Такой вопрос: есть строка к примеру 
Код

$str="This is my string and param is #my.parameter#";


Вопрос в от в чем - есть ли средство в пхп чтобы распарсить строки такого вида и подставить туда значения переменных, в моем конкретном случае предполагается что эти вида my.parameter хранятся в каком то массиве. Спасибо  smile  smile  smile 


--------------------
The truth is out there
PM MAIL   Вверх
azesmcar
Дата 4.11.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 12
Всего: 211



PM   Вверх
zone51
Дата 4.11.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



azesmcar, 
Спасибо но так не пойдет мне надо что то вроде этого
Код

$str="This is my string %my.messages";
$params=array();
$params['my.messages']='parparpar';
echo sprintf($str,$params);


то есть определить есть ли в пхп конструкции которые делали бы %my.messages и которое проставлялось бы из массива. В sscanf такого нет. Спасибо  smile  smile  smile 


--------------------
The truth is out there
PM MAIL   Вверх
Simpliest
Дата 4.11.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



zone51, 
preg_replace
preg_replace_callback


--------------------
user posted image
PM   Вверх
Ипатьев
Дата 4.11.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



все равно непонятно, почему в $str должно быть обязательно "This is my string %my.messages";, когда всех прекрасно устраивает $str="This is my string %s";
PM MAIL   Вверх
Simpliest
Дата 4.11.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Ипатьев, 
навскидку приходит наполнение массива параметров из произвольных/нескольких источников.
Когда порядок неизвестен или лень отслеживать. 

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


--------------------
user posted image
PM   Вверх
azesmcar
Дата 4.11.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 12
Всего: 211



zone51


Цитата(Ипатьев @  4.11.2009,  10:31 Найти цитируемый пост)
все равно непонятно, почему в $str должно быть обязательно "This is my string %my.messages";, когда всех прекрасно устраивает $str="This is my string %s"; 

 smile 
по поводу массива, можно вызвать sprintf с помощью call_user_func_array 
PM   Вверх
Ипатьев
Дата 4.11.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Simpliest, вот и вы теперь придумываете возможные объяснения. smile
Спасибо, я и сам могу. Может, автор банальные шаблоны делает.

Но идея в том, чтобы его самого спросить. 
PM MAIL   Вверх
zone51
  Дата 4.11.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Спасибо всем за ответы. У меня есть строка
Код

$str="This is #english.my.string# and this is #english.good#";


Я заранее не знаю какие у меня параметры есть так как эта функция которую я делаю будет работать с самыми разными строками и текстами. Насчет sscanf попробую. Это все вообще делается для того чтобы сделать сайт интернациональным то есть эти параметры в зависимости от содержания массива параметров будут представлять либо английские либо русские слова. Спасибо

Добавлено через 4 минуты и 5 секунд
То есть 
Код

$str="This is #my.string# and this is #good#";

То есть эти параметры есть в каком то массиве и будут представлять ибо русские либо английские слова 


--------------------
The truth is out there
PM MAIL   Вверх
Ипатьев
Дата 4.11.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



рекомендую gettext
индустриальный стандарт мультиязычности.

непонятно, правда, зачем в английской строке русские слова %)

PM MAIL   Вверх
Simpliest
Дата 4.11.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Цитата(Ипатьев @  4.11.2009,  09:44 Найти цитируемый пост)
придумываете возможные объяснения

Возможно.

Я sprintf, printf не использую - предпочитаю формировать строки конкатенацией (они нагляднее).


--------------------
user posted image
PM   Вверх
zone51
Дата 4.11.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Ипатьев, 
Код

непонятно, правда, зачем в английской строке русские слова %)


Это чисто пример, на самом деле это будет использоваться чтобы вывоить надписи к полям ввода и т д, то есть текст будет html


--------------------
The truth is out there
PM MAIL   Вверх
Simpliest
Дата 4.11.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



zone51, для общей информации можешь ознакомится с подходом в ZF

http://framework.zend.com/manual/en/zend.translate.html

Добавлено через 1 минуту и 18 секунд
Цитата(zone51 @  4.11.2009,  09:58 Найти цитируемый пост)
будет использоваться чтобы вывоить надписи к полям ввода и т д, то есть текст будет html 

хм. Таки шаблонизатор....


--------------------
user posted image
PM   Вверх
zone51
  Дата 4.11.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Получилось что то вроде
Код

$params=array();
$params['mymessages']='parparpar';
$params['mytest']='asdfsfsdf';

$str="This is my string {=mymessages} and {=mytest}";


$newfunc = create_function('$matches,global $params', 'return $params[$matches[0]];');
echo preg_replace_callback("{=(\w+)}",$newfunc,$str);



Но нифига не работает :(
Подскажите как и что. Спасибо

Добавлено через 3 минуты и 57 секунд
А вот так работает smile
Код

$params=array();
$params['mymessages']='parparpar';
$params['mytest']='asdfsfsdf';

$str="This is my string {=mymessages} and {=mytest}";


$newfunc = create_function('$matches', 'global $params;return $params[$matches[1]];');
echo preg_replace_callback("{=(\w+)}",$newfunc,$str);




--------------------
The truth is out there
PM MAIL   Вверх
azesmcar
Дата 4.11.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 12
Всего: 211



Код

<?php
    $params=array();
    $params['mymessages']='parparpar';
    $params['mytest']='asdfsfsdf';
    $str="This is my string {=mymessages} and {=mytest}";
    
    $newfunc = create_function('$matches', 'global $params; return $params[$matches[1]];');
    echo preg_replace_callback("{=(\w+)}", $newfunc, $str);
?>

так?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.