我使用Serialize函数将数组存储在我的MYSQL数据库中,然后我在其他页面中取消了对他的说法。 数组结构如下所示:
Array ( [0] => Array ( [names] => somename1 [rating] => 10 ) [1] => Array ( [names] => somename2 [rating] => 9 ) )
当我将数组插入数据库时,我使用此函数将其转换为字符串:
$array_string=mysql_escape_string(serialize($arr));
然后,当我正在进行unSerialize时,我不知道如何将字符串(数据库中的数组)恢复到之前的结构。 (如何将此字符串转换回数组)
我知道我必须使用这一行:
$arr=explode("|",$list);
在某种程度上,但我无法将其恢复到以前的数组的精确结构。 这一行的结果在数组结构上略有不同:
Array ( [0] => Array( [0] => Array ( [names] => d [rating] => 7 ) [1] => Array ( [names] => b [rating] => 6 ) ) )
由于
答案 0 :(得分:1)
序列化的反面是unserialize。
$old_array = unserialize($serialized_array_string_from_db);
将序列化的值存储到数据库中,不允许单独查询它们。 您必须获取序列化值,反序列化,然后您可以开始使用它们。 从数据库设计的角度来看,这不是很有效。我的建议是在额外的表格中为“名称”和“评级”创建单独的字段。
将阵列序列化到数据库
$array = array('names' => 'somename1', 'rating' => 10);
$array_serialized_to_string = serialize($array);
doStoreToDb($array_serialized_to_string, somewhere);
从数据库中获取序列化数组
$array_serialized_to_string = doFetchFromDb(somewhere);
$array = unserialize($array_serialized_to_string);
数组结构的差异可能是查询“返回集为数组”的结果。 只需删除外部数组:
$old_array = unserialize($serialized_array_string_from_db);
$array = $old_array[0];
答案 1 :(得分:1)
尝试json_encode
和json_decode
$array_to_store = array(....);
$str_array = json_encode($array_to_store);
//Store $str_array
//Retrieve it and to make it an array again
$array = json_decode($str_array, true);
******************* Edited *********************
我没有看到序列化和反序列化有什么问题:
$array = array(
array(
'names' => 'somename1',
'rating' => 10
),
array(
'names' => 'somename2',
'rating' => 9
)
);
//Array before
print_r('<pre>');
print_r($array);
//Serialised Array
$s = serialize($array);
print_r('<pre>');
print_r($s);
//Unserialised Array
print_r('<pre>');
print_r(unserialize($s));