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
Форумы портала PHP.SU :: Версия для печати :: Доступность переменной в элементе массива
Форумы портала PHP.SU » PHP » Программирование на PHP » Доступность переменной в элементе массива

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

1. ngn - 23 Мая, 2010 - 01:46:19 - перейти к сообщению
Здравствуйте!
Вопрос в следующем:
Есть скрипт (парсер), который заполняет определенную форму.
Имеем массив
$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 была видима в значении массива и как?
2. valenok - 23 Мая, 2010 - 09:29:28 - перейти к сообщению
Дело в том, что сначала содержимое массивов превращается в строку с подстановкой всех переменных, а потом уже вы в эту переменную вставляете значение.

Можете воспользоваться str_replace() и все вхождения $r заменять на ваш текст.
Только не забудьте взять строку в одинарные кавычки.
3. JustUserR - 23 Мая, 2010 - 13:19:56 - перейти к сообщению
ngn То есть вам нужно интерполировать переменную $r не сразу при создании массива а после - для этог в определении массва проэкранируйте символ $ и в вашем массиве сохранится фактически $r - а потом при выполнеии подстановки например регулярным выражением с preg_replace_callback вы ищите все имена переменных и динамически их заменяете

 

Powered by ExBB FM 1.0 RC1