Получить содержимое из строки в разных ситуациях - PullRequest
0 голосов
/ 17 февраля 2010

Я думаю о том, чтобы хранить данные из формы в виде строки, каждый ответ отделяется конвейером. У меня проблема в том, что некоторые ответы могут быть в форме нескольких пунктов. Мы сохраняем выбор радиокнопок вместе с соответствующими ответами, например,

Question 1 - 1 Answer [A1]
Question 2 - Radio button selected [A2] + 3 form fields
Question 3 - 1 Answer [A3]

Так что я думал о хранении данных как:

$str = A1|A2[x,x,x]|A3

Причина, по которой я решил заключить несколько вариантов в квадратные скобки, заключается в том, чтобы они касались вопроса.

Я думаю, что мое решение будет работать, но когда я приду, чтобы прочитать значения из базы данных, я использую Php explode(), чтобы получить значения в массив.

например. explode("|",$str);

Даст:

array(0=>A1, 1=>A2[x,x,x],2=>A3);

Прежде чем приступить к разработке, как лучше всего получить содержимое [x,x,x] и отделить его от array[1]?

Любое предложение будет высоко ценится.

Спасибо

Ответы [ 4 ]

0 голосов
/ 17 февраля 2010

Вы также можете хранить информацию в виде ассоциативного массива, закодированного в json с помощью функции json_encode (). Затем, когда вы выбираете данные из базы данных, вы просто делаете:

$ arr = json_decode ($ value);

http://php.net/manual/en/function.json-encode.php

0 голосов
/ 17 февраля 2010

Я думаю, вам нужно взглянуть на сериализовать и десериализовать .

0 голосов
/ 17 февраля 2010

В качестве альтернативы, вместо того, чтобы получать ответы в виде строки, а затем пытаться преобразовать их в массив, вы можете начать с них в массиве, а затем, если вам нужно превратить их в строку, вы можете получить:

$ array = array ('A1', array (x, x, x), 'A3');

Тогда, если вам нужно это как строку, вы можете вызвать:

$ str = serialize ($ array);

Таким образом, вы получаете аналогичный метод доступа к своему решению после того, как взорвали строку, только вам не нужно иметь дело с попыткой разбить строку A2 [1,2,3] дальше, как вы можете просто проверьте, является ли это массивом.

0 голосов
/ 17 февраля 2010

Ваш подход не дает никакой пользы и вносит ненужную сложность. Почему бы вам просто не использовать реляционную базу данных и не хранить каждый фрагмент данных в отдельной строке таблицы? Если у вас нет доступа к MySQL или аналогичной СУБД, вы всегда можете использовать SQLite .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...