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

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

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

 

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

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

тема: Спарсить строку в нужный массив
 
 автор: naruto   (27.02.2012 в 12:37)   письмо автору
 
 

Здравствуйте! Есть задача, приходящие данные со строки перевести в массив удобный для добавления данных в БД.
Пример приходящей строки

que_type1=radio&question1=Vopros-1&answer1=Otvet-1&que_type2=check&question2=Vopros-2&answer3=Otvet-2&answer2=Otvet-3&.

нужно раскидать в массив вида
question[0] = Vopros-1
question[1] = Vopros-2 ...

question[0][type] = radio
question[1][type] = check...

question[0][name][0] = otvet-1
question[1][name][0] = otvet-2
question[1][name][1] = otvet-3

Сам алгоритм хотя бы, как я понимаю регулярные выражения пригодятся, но само главное как ответы привязать к вопросам, тоесть ответы между question1 и question2 поместить в question[0][name][0] и т.д. строка может быть любой длины

  Ответить  
 
 автор: cheops   (27.02.2012 в 12:47)   письмо автору
 
   для: naruto   (27.02.2012 в 12:37)
 

А строку запроса уже не получится поменять? на такую
que_type[1]=radio&question[1]=Vopros-1&answer[1]=Otvet-1&que_type[2]=check&question[2]=Vopros-2&answer[3]=Otvet-2&answer[2]=Otvet-3&.
Можно было бы обойтись вообще без регулярных выражений или этого уже не изменить?

  Ответить  
 
 автор: naruto   (27.02.2012 в 12:56)   письмо автору
 
   для: cheops   (27.02.2012 в 12:47)
 

Ну вообще приходят данные се реализованные с формы созданной с помощью jquery, и они попадают в массив POST автоматом.
$_POST['que_type1'] = radio
$_POST['question1'] = Vopros-1 и т.д

Может конечно я сделал изначально криво значения name в input ах формы, но как умел так и сделал. Есть смысл скинуть что за форма генерируется?

  Ответить  
 
 автор: Sfinks   (27.02.2012 в 17:13)   письмо автору
 
   для: naruto   (27.02.2012 в 12:37)
 

А как определяется к какому вопросу относится ответ?
answer3=Otvet-2&answer2=Otvet-3 -не содержит информации о номере вопроса!
Или просто по порядку? Т.е. все что идет до следующего "que_type" и есть ответы на предыдущий "que_type"?

  Ответить  
 
 автор: Sfinks   (27.02.2012 в 18:02)   письмо автору
 
   для: Sfinks   (27.02.2012 в 17:13)
 

Думаю я правильно понял.

Но такой массив как вы указали не может существовать, т.к. если question[0] = Vopros-1, то question[0] - это уже строка, но никак не массив и у нее не может быть подэлементов 'type' и 'name'.

Можно так:
<pre><?php

  $s 
"que_type1=radio&question1=Vopros-1&answer1=Otvet-1&que_type2=check&question2=Vopros-2&answer3=Otvet-2&answer2=Otvet-3";
  
$pattern "#que_type\d+=.*?(?:&answer\d+=.+?(?=&que_type|$))+#";
  
preg_match_all$pattern $s $out );
  foreach( 
$out[0] as $key => $val ){

    list( 
$typ $que $ans )              = explode"&" $val );
    list( 
$none $question[$key]['name'] ) = explode"=" $que );
    list( 
$none $question[$key]['type'] ) = explode"=" $typ );
    
$answs explode"&" $ans );
    foreach( 
$answs as $key2 => $answ ){
      list( 
$none $question[$key]['answ'][$key2] ) = explode"=" $answ );
    }
  }
  
  
print_r($question);

?></pre>
результат:
Array(
    [0] => Array(
            [name] => Vopros-1
            [type] => radio
            [answ] => Array(
                    [0] => Otvet-1
                )
        )
    [1] => Array(
            [name] => Vopros-2
            [type] => check
            [answ] => Array(
                    [0] => Otvet-2
                    [1] => Otvet-3
                )
        )
)

  Ответить  
 
 автор: naruto   (29.02.2012 в 08:48)   письмо автору
 
   для: Sfinks   (27.02.2012 в 18:02)
 

Спасибо! Вчера только переделал форму чтобы сделать без регулярок, сегодня заглянул сюда( возьму на заметку! Благодарю!

  Ответить  
Rambler's Top100
вверх

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