сериализация массива и сохранение в БД

0

У меня есть массив вроде

$newArray = $_POST[$newId];
print_r($newArray);

он печатает как

Array ( [1] => Yes [2] => a [3] => b [4] => c [5] => d [6] => e [7] => f [8] => [9] => [10] => [11] => [12] => [13] => [14] => ) 

но когда я пытаюсь сохранить в db после сериализации, например

serialize($newArray)

он хранится как

s:211:"Array
(
    [1] => Yes
    [2] => ab
    [3] => c
    [4] => d
    [5] => e
    [6] => f
    [7] =>
    [8] =>
    [9] =>
    [10] =>
    [11] =>
    [12] =>
    [13] =>
    [14] =>
)

"; 

который является единственным элементом массива в БД.. как бы правильно сериализовать элемент.

  • 1
    Вы спрашиваете «как правильно сериализовать элемент», но вопрос к вам: что вы считаете «правильной сериализацией» массива в БД? Вы не поделились своей моделью данных или ожиданиями, поэтому довольно сложно ответить на ваш вопрос.
  • 0
    Я предполагаю, что правильная сериализация должна быть a:14:{i:1;s:3:"Yes";i:2;s:2:"ab";...}
Показать ещё 1 комментарий
Теги:

3 ответа

4
Лучший ответ

Похоже на сериализацию строки, а не массива. Вы уверены, что $newArray - массив?

Строка, возвращаемая из сериализации, начинается с 's: 211'. Это означает, что строка была передана в serialize(). Если массив был передан в serialize(), возвращаемая строка начиналась с 'a: 14'.

  • 0
    я хранил массив в текстовом поле .... так что он был преобразован в строку ... как мне его перевести ...?
  • 2
    Нет, я имел в виду, что вы передаете строку для serialize() , а не массив.
0

Не совсем уверен, что я понимаю вопрос, если вы не хотите сериализовать, и если вы хотите передать его из текстового поля, возможно, выполните собственный синтаксис, например: 1: a; b: 2; c: 3

затем взорвется (';', $string); цикл, который и для результата взорвется (':', $rows)

сделать разделители труднее столкнуться

explode("[[;]]", string); // 1]]:[[b[[;]]
0

@pradeep где вы сохраняете $newArray в текстовом поле, сохраните его с помощью серийного ввода

$arrayString = $_POST['newId'];

Вы получите сериализованный массив в $arrayString. Если вы хотите использовать этот массив перед сохранением в базе данных, используйте unserialize, иначе прямое хранилище в базе данных, поскольку оно уже сериализовано.

$array = unserialize($arrayString);

Это решит вашу проблему.

  • 0
    Это не лучшая идея. Что если в одной из строк есть запятая?
  • 0
    @Rocket Я обновил свой ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню