将数组转换为字符串并将其返回到PHP中的数组

时间:2014-10-19 11:26:06

标签: php arrays string

我使用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 )  ) )

由于

2 个答案:

答案 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_encodejson_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));