我有一个以 $post_id 作为键的数组。保存 $data 时,我将其保存为字符串:
foreach( $data as $post_id => $details )
$string .= "-pid-$post_id-$details";
使用数据时,我需要将其转换回数组,其中 $post_id 为键,$details 为值。当我不知道 $post_id 是什么时如何爆炸它?
我有一个以 $post_id 作为键的数组。保存 $data 时,我将其保存为字符串:
foreach( $data as $post_id => $details )
$string .= "-pid-$post_id-$details";
使用数据时,我需要将其转换回数组,其中 $post_id 为键,$details 为值。当我不知道 $post_id 是什么时如何爆炸它?
不要这样做。如果您需要序列化字符串,请使用 json_encode():
$string = json_encode($data);
然后,当您需要再次解码时:
$data = json_decode($string);
安全又方便。
这是 PHP 参考:json_encode()
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 文档
您需要使用
爆炸(字符串 $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 建议的那样使用序列化和反序列化。
如果我理解你的问题...
$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可能是首先“字符串化”数据的更好选择。但是,按照您选择的方式进行操作可能是有正当理由的。