2010-09-07 67 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[[;]]