2010-09-07 31 views
0

存储我有像序列化的阵列和在DB

$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] => 
) 

"; 

这是DB..how中的单个数组元素我是否正确地序列化元素。

+1

你问“我怎么正确序列化元素”,但问题是你:你认为数据库中的数组“正确的序列化”是什么?您尚未分享您的数据模型或期望,因此回答您的问题相当困难。 – dkamins 2010-09-07 18:05:44

+0

我假设正确的序列化应该是:a:14:{i:1; s:3:“是”; i:2; s:2:“ab”; ...} – 2010-09-07 18:12:04

+0

您确定您正确发布数组?什么'is_array($ _ POST [$ newId])'返回? – 2010-09-07 18:19:31

回答

4

它看起来像序列化一个字符串,而不是一个数组。你确定$newArray是一个数组吗?

从serialize返回的字符串以's:211'开头。这意味着一个字符串被传入serialize()。如果数组传入serialize(),则返回的字符串将以'a:14'开头。

+0

我在一个文本字段中存储数组....所以我把它变成了字符串...我怎么过来呢..? – Hacker 2010-09-07 18:01:34

+2

不,我的意思是你传递一个字符串到'serialize()',而不是一个数组。 – 2010-09-07 18:15:43

0

@pradeep 在那里你存储$ newArray在文本框,它存储由serialling

$arrayString = $_POST['newId']; 

您将获得$ arrayString seriallized阵列。 如果你想在存储到数据库之前使用该数组,请使用反序列化,否则直接存储在数据库中,因为它已经被顺序化了。

$array = unserialize($arrayString); 

这将解决你的问题

+0

这不是最好的主意。如果其中一个字符串有逗号呢? – 2010-09-07 18:14:58

+0

@火箭我已经更新了我的回答 – 2010-09-07 18:33:15

+0

我不认为这是有效的。我更喜欢旧的答案(你不能有一个逗号的字符串)。 – 2010-09-07 19:39:07

0

不是真的知道我理解的问题,如果你不想虽然序列化,如果你想从一个文本字段通过它,也许做定制语法like-1:a; b:2; c:3

then explode(';',$ string);环路和结果,爆炸(“:”,$行)

使分隔符更难冲突

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