2010-09-07 2 views
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] =>) 

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

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

Вы спросите «Как я правильно сериализовать элемент», но вопрос заключается в вы: что вы считаете «правильной сериализацией» массива в БД? Вы не поделились своей моделью данных или ожиданиями, поэтому довольно сложно ответить на ваш вопрос. – dkamins

+0

Я предполагаю, что правильная сериализация должна быть 'a: 14: {i: 1; s: 3:" Yes "; i: 2; s: 2:" ab "; ...}' –

+0

Вы уверены, что правильно разместили массив? Что делает 'is_array ($ _ POST [$ newId])' return? –

ответ

4

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

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

+0

Я хранил массив в текстовом поле .... так что я его превратил в строку ... как мне это сделать ..? – Hacker

+2

Нет, я имел в виду, что вы передаете строку 'serialize()', а не массив. –

0

@pradeep где хранить $ newArray в текстовом поле, хранить его serialling

$arrayString = $_POST['newId']; 

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

$array = unserialize($arrayString); 

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

+0

Это не лучшая идея. Что, если в одной из строк была запятая? –

+0

@Rocket Я обновил свой ответ –

+0

Я не думаю, что это работает так. Мне нравится старый ответ лучше (вы просто не можете иметь строку с запятой). –

0

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

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

сделать разделители сложнее конфликтовать

explode("[[;]]", string); // 1]]:[[b[[;]] 
Смежные вопросы