3

我有一个以 $post_id 作为键的数组。保存 $data 时,我将其保存为字符串:

foreach( $data as $post_id => $details )
  $string .= "-pid-$post_id-$details";

使用数据时,我需要将其转换回数组,其中 $post_id 为键,$details 为值。当我不知道 $post_id 是什么时如何爆炸它?

4

4 回答 4

5

不要这样做。如果您需要序列化字符串,请使用 json_encode():

$string = json_encode($data);

然后,当您需要再次解码时:

$data = json_decode($string);

安全又方便。

这是 PHP 参考:json_encode()

于 2013-06-28T03:49:32.233 回答
3

php 有一个名为 serialize 的方法,它将获取一个数组(例如 $_POST)并将其转换为一个字符串,然后可以使用 unserialize 将其重新创建为一个数组

<?php
    // $_POST looks like this for example:
    // $_POST['value'] = 100;
    $string = serialize($_POST);
    echo $string; // Prints '"a":1:{s:5:"value";s:3:"100";}'
    $data = unserialze($string);
    print_r($data); // Prints Array[0] ( 'value' => '100' )
?>

我不会讲关于不净化用户输入的内容,而是讲关于净化用户输入的内容。

连载

反序列化

请注意,这是一个可能包含空字节的二进制字符串,需要按原样存储和处理。例如,serialize() 输出通常应存储在数据库中的 BLOB 字段中,而不是 CHAR 或 TEXT 字段中。 -- 来自 php 文档

于 2013-06-28T03:50:58.693 回答
2

您需要使用

爆炸(字符串 $delimiter ,字符串 $string [, int $limit ] )

这会将您的数据作为数组返回

例如

foreach($data AS $post_id => $details) {
  $string .= "|||$post_id||$details"
}

然后让你的数据从字符串中恢复

    $newArray = explode('|||', $string);

foreach($newArray AS $key=>$val){
   $holding = explode('||', $val);
   $finalArray[$holding[0]] = $val;
}

现在您将拥有一个数组,其中键是 id,val 是字符串中每个项目的详细信息。

编辑:

或者像 Brombomb 建议的那样使用序列化和反序列化。

于 2013-06-28T03:53:11.683 回答
1

如果我理解你的问题...

$temp = explode('-pid-', $string);
array_shift($temp);

foreach ($temp as $item) {
    list($post_id, $value) = explode('-', $item);
    $data[$post_id] = $value;
}

json_encode和相关的json_decode可能是首先“字符串化”数据的更好选择。但是,按照您选择的方式进行操作可能是有正当理由的。

于 2013-06-28T04:10:36.857 回答