Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP非序列化变量_Php_Serialization - Fatal编程技术网

PHP非序列化变量

PHP非序列化变量,php,serialization,Php,Serialization,各位下午好, 是否有任何简单的方法可以取消序列化该类型的数据并将所有人放入数组() 不使用explode(),foreach()然后使用preg\u match函数 谢谢您的回答。您可以使用eval将$variable的内容作为数组分配给另一个变量,如下所示: $variable= "'Body Style'=>'SEDAN 4 DOOR';'CD Player'=>'PRESENT';'Color'=>'GRAY';'Engine Size'=>'3.0L V6 FI

各位下午好,

是否有任何简单的方法可以取消序列化该类型的数据并将所有人放入数组()

不使用
explode()
foreach()
然后使用
preg\u match
函数


谢谢您的回答。

您可以使用
eval
$variable
的内容作为数组分配给另一个变量,如下所示:

$variable= "'Body Style'=>'SEDAN 4 DOOR';'CD Player'=>'PRESENT';'Color'=>'GRAY';'Engine Size'=>'3.0L V6 FI  F';'Air Bags'=>'4';'Radio'=>'PRESENT';'Tape Deck'=>'N/A';'Estimated Repair Cost'=>'5518';'ACV'=>'6122';'Driver Airbag'=>'INTACT';'Passenger Airbag'=>'INTACT';'Left Side Airbag'=>'INTACT';'Right Side Airbag'=>'INTACT';'VIN Status'=>'OK';'Interior Color'=>'GRAY';'Airbag'=>'INTACT';'KeyFob'=>'PRESENT';";
$variable = str_replace(';', ',', $variable);
eval("\$array = [$variable];");
print_r($array);
但是,不鼓励使用
eval
。请看这里:

我假设您是从其他地方获得
$variable
的内容。例如,有没有什么特别的原因使数据采用这种格式而不是json格式

编辑:我刚刚意识到代码不能按原样工作,因为数组的值是用分号而不是冒号分隔的。首先需要用冒号替换分号。我已经更新了代码以反映这一点

是否有任何简单的方法可以取消序列化该类型的数据并将所有人放入数组() 不使用explode()、foreach()和preg_match函数

是的,您可以使用
preg\u match\u all()

输出:

Array
(
    [Body Style] => SEDAN 4 DOOR
    [CD Player] => PRESENT
    [Color] => GRAY
    [Engine Size] => 3.0L V6 FI  F
    [Air Bags] => 4
    [Radio] => PRESENT
    [Tape Deck] => N/A
    [Estimated Repair Cost] => 5518
    [ACV] => 6122
    [Driver Airbag] => INTACT
    [Passenger Airbag] => INTACT
    [Left Side Airbag] => INTACT
    [Right Side Airbag] => INTACT
    [VIN Status] => OK
    [Interior Color] => GRAY
    [Airbag] => INTACT
    [KeyFob] => PRESENT
)
这种方法的优点是,即使任何键或值包含分号,例如
Body,它也可以工作;款式
轿车;4门
将导致
爆炸()
进近失败


请参见

有什么原因不能使用这些特定函数吗?我绝对不赞同这一点:
$json='{.str_replace([“'”,'=>',';'],[“'”,':',',']),rtrim($variable,;')。}“;
我想他希望将字符串解析成一个数组,其中包含键值对中的多个元素。这只是将整个字符串放入一个键中。这不需要求值。
if (preg_match_all("/'(.*?)'=>'(.*?)';/", $variable, $matches)) {
    $result = array_combine($matches[1], $matches[2]);
    print_r($result);
}
Array
(
    [Body Style] => SEDAN 4 DOOR
    [CD Player] => PRESENT
    [Color] => GRAY
    [Engine Size] => 3.0L V6 FI  F
    [Air Bags] => 4
    [Radio] => PRESENT
    [Tape Deck] => N/A
    [Estimated Repair Cost] => 5518
    [ACV] => 6122
    [Driver Airbag] => INTACT
    [Passenger Airbag] => INTACT
    [Left Side Airbag] => INTACT
    [Right Side Airbag] => INTACT
    [VIN Status] => OK
    [Interior Color] => GRAY
    [Airbag] => INTACT
    [KeyFob] => PRESENT
)