Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Доступность переменной в элементе массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ngn
Отправлено: 23 Мая, 2010 - 01:46:19
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Здравствуйте!
Вопрос в следующем:
Есть скрипт (парсер), который заполняет определенную форму.
Имеем массив
$n["Sender1"] = array("mes_subject"=>"Привет, {$r}. Как дела, {$r}?", "text"=>"{$r} , как дела, напиши мне!");
$n["Sender2"] = array("mes_subject"=>"{$r} , как дела, напиши мне!", "text"=>"Привет, {$r}. Как дела, {$r}?");
и т.д.
где $r=Вася (например). $r получаем при каждом проходе цикла.
Сложность еще и в том, что $r может находиться сразу в нескольких местах предложения (в противном случае разделил бы предложения на несколько частей и склеил бы черз промежуточную переменную).
Скрипт заполняет поля формы значениями массива. При задании переменной как {$r} либо $r в строке вместо переменной - пустота, при задании '$r', "$r", [$r] отображаются только скобки и кавычки. Понятно, что переменная видна, но ее значение - нет.

Если не совсем понятно объяснил, вот фрагмент скрипта:
PHP:
скопировать код в буфер обмена
  1. // Определяем массив данных для заполнения форм
  2. $n["Sender1"] = array("mes_subject"=>"Привет, {$r},как дела?", "text"=>"{$r} , как дела, напиши мне!");
  3. $n["Sender2"] = array("mes_subject"=>"Привет, {$r},как дела?", "text"=>"{$r} , как дела, напиши мне!");  
  4. if($anchor->get_inner_text_by_number(18)!="All messages") // если нет ссылки "All messages" - пишем письмо  
  5. {  
  6. $n1=$anchor->get_inner_text_by_number(13);  //переменная для выбора отправителя из массива (ее значение Sender1 либо Sender2)
  7. //получаем FirstName для вставки в письмо
  8. $page_source=$webpage->get_source();  // получаем исходный код страницы
  9. $start=strpos($page_source,'Name: ');   //
  10. $start=$start+11;
  11. $end=strpos($page_source,'</div><div>Age');
  12. $r=substr($page_source,$start,$end-$start);sleep(2);  
  13. $anchor->click_by_number(16); //написать сообщение
  14. $browser->wait_for(10,5);  
  15. $input->set_value_by_name('mes_subject',$n[$n1]["mes_subject"]); //Заполняем поле Заголовок  
  16. $textarea->set_value_by_name('text',$n[$n1]["text"]);  //заполняем поле Текст письма
  17. $browser->wait_for(10,5);
  18. sleep(32);  
  19. $button->click_by_number(1);  //нажимаем Send
  20. }

Подскажите пожалуйста, возможно ли сделать, чтобы переменная $r была видима в значении массива и как?
 
 Top
valenok Модератор
Отправлено: 23 Мая, 2010 - 09:29:28
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Дело в том, что сначала содержимое массивов превращается в строку с подстановкой всех переменных, а потом уже вы в эту переменную вставляете значение.

Можете воспользоваться str_replace() и все вхождения $r заменять на ваш текст.
Только не забудьте взять строку в одинарные кавычки.


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 23 Мая, 2010 - 13:19:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ngn То есть вам нужно интерполировать переменную $r не сразу при создании массива а после - для этог в определении массва проэкранируйте символ $ и в вашем массиве сохранится фактически $r - а потом при выполнеии подстановки например регулярным выражением с preg_replace_callback вы ищите все имена переменных и динамически их заменяете


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB