|
|
|
| Здравствуйте! Есть задача, приходящие данные со строки перевести в массив удобный для добавления данных в БД.
Пример приходящей строки
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] и т.д. строка может быть любой длины | |
|
|
|
|
|
|
|
для: 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&.
Можно было бы обойтись вообще без регулярных выражений или этого уже не изменить? | |
|
|
|
|
|
|
|
для: cheops
(27.02.2012 в 12:47)
| | Ну вообще приходят данные се реализованные с формы созданной с помощью jquery, и они попадают в массив POST автоматом.
$_POST['que_type1'] = radio
$_POST['question1'] = Vopros-1 и т.д
Может конечно я сделал изначально криво значения name в input ах формы, но как умел так и сделал. Есть смысл скинуть что за форма генерируется? | |
|
|
|
|
|
|
|
для: naruto
(27.02.2012 в 12:37)
| | А как определяется к какому вопросу относится ответ?
answer3=Otvet-2&answer2=Otvet-3 -не содержит информации о номере вопроса!
Или просто по порядку? Т.е. все что идет до следующего "que_type" и есть ответы на предыдущий "que_type"? | |
|
|
|
|
|
|
|
для: 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 , 3 );
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
)
)
)
|
| |
|
|
|
|
|
|
|
для: Sfinks
(27.02.2012 в 18:02)
| | Спасибо! Вчера только переделал форму чтобы сделать без регулярок, сегодня заглянул сюда( возьму на заметку! Благодарю! | |
|
|
|