Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > сгенерировать имя переменной


Автор: yalo 23.10.2007, 10:43
здравствуйте всем
такая вот вроде простая с первого взгляда задача.
нужно сгенерировать имя переменной, например, пробегая по какому-нибудь массиву: foreach ($array as $key => $value), скрипт будет генерировать имя переменной таким образом: $PLACE.$key, но напрямую так разумеется ничего не получится, так как скрипт соединит ЗНАЧЕНИЯ переменных $PLACE и $key, а мне надо чтобы имя переменной генерировалось: $PLACE3, $PLACE5, где 3 и 5 это $key при прохождении массива. Затем в сгенерированную переменную будут заносится значения, в принципе не важно какие. 

Автор: flashaa 23.10.2007, 10:48
Символическая ссылка 
Код

$name = 'PLACE' . $key;
$$name ;

Автор: yalo 23.10.2007, 10:54
а как дальше занести в полученной что-то? во что заносить?

Автор: flashaa 23.10.2007, 11:07
вот твоя переменная  - $$name

Автор: yalo 23.10.2007, 11:23
ничего себе smile 
а мне уже два авторитетных человека сказали, что это скорее всего нерешаемо
вот спасибо-то, пребольшое smile 
с меня плюсикsmile

Автор: flashaa 23.10.2007, 11:26
Все решаемо, PHP достаточно гибкий язык.

Код

foreach ($array as $key => $value) {
    
    $name = 'PLACE' . $key;
    $$name = ... ; // общаемся к переменной, имя которой равно 'PLACE' плюс значение текущего ключа.

}


Только вот не пойму, зачем такое может понадобиться.

Автор: skyboy 23.10.2007, 11:30
Цитата(flashaa @  23.10.2007,  10:26 Найти цитируемый пост)
Только вот не пойму, зачем такое может понадобиться.

точно. гораздо лучше создать ассоциативный массив. зачем усложнять себе жизнь?

Автор: yalo 23.10.2007, 11:36
это нужно мне в банерокрутилке, вытаскивается массив баннерных мест с включенными в данный момент там банерами, в шаблон html будут идти в разные места {PLACE3}, {PLACE5} и т.д. Это даже и не переменные и не константы.. Их потом будет основной скрипт заменять на значения через preg_match_all, str_replace... массив $place[] здесь бы не подошел.. В общем, может быть, это и ни не самый лучший вариант обработки, но дело в том, что выбирать не приходится - cms чужая, была еще до моего прихода, и стартовать мне пока следует от нее.. вот.

Добавлено через 4 минуты и 32 секунды
Цитата(skyboy @  23.10.2007,  11:30 Найти цитируемый пост)
гораздо лучше создать ассоциативный массив. зачем усложнять себе жизнь? 

согласна, но применительно к данному программному продукту, ничего не получится, для шаблонов должны быть только просто переменные, не являющиеся какими-либо массивами, и как раз  в данный момент, когда горит проект, изобретать новый (пусть даже свой и может быть более лучший) способ обработки данных для выходного шаблона будет действительно гораздо более длительным занятием

Автор: skyboy 23.10.2007, 15:41
yalo, т.е. если в шаблоне всечается "{place5}" оно меняется на значение переменной $place5?
может тогда в процедуре замены сделать замену не на некое $$name, а на $assoc_array[$name]?
Проще будет устанавливать значения в одном массиве(особенно - проще отлаживать: можно вывести все шаблонные переменные разом), да и замена будет проще($template_vars - массив с переменными шаблона, $template - шаблон):
Код

foreach($template_vars as $name => $value) {
 $template= str_ireplace('{'.$name.'}',$value,$template);
}

впрочем, я специфики не знаю, может и правда - 
Цитата(yalo @  23.10.2007,  10:36 Найти цитируемый пост)
изобретать новый [...] способ обработки [...] будет действительно [...] длительным занятием


Автор: flashaa 25.1.2008, 12:12
Цитата(yalo @  23.10.2007,  10:43 Найти цитируемый пост)
нужно сгенерировать имя переменной, например, пробегая по какому-нибудь массиву: foreach ($array as $key => $value),

Кстати вспомнилось: у Котерова читал, что есть такая ф-ция, которая берет массив и создает переменные как раз как надо в данной теме. Но в мануале не нашел ее. Кто-то помнит название этой ф-ции?

Автор: skyboy 25.1.2008, 12:48
Цитата(flashaa @  25.1.2008,  11:12 Найти цитируемый пост)
 Кто-то помнит название этой ф-ции?

самому писать надо.
из стандартных механизмов с подобным действием - директива http://www.php.net/register_globals.
вот только надо ли таким заниматься?

Автор: SelenIT 25.1.2008, 13:23
Цитата(flashaa @  25.1.2008,  12:12 Найти цитируемый пост)
Кто-то помнит название этой ф-ции?

extract?

Автор: flashaa 25.1.2008, 13:29
Цитата(skyboy @  25.1.2008,  12:48 Найти цитируемый пост)
самому писать надо.

Говорю, же есть такая ф-ция:
Цитата(SelenIT @  25.1.2008,  13:23 Найти цитируемый пост)
extract? 

Cпасибо, а обратная ей ф-ция - compact.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)