PHP反序列化变量

时间:2018-11-08 15:57:45

标签: php serialization

大家下午好

任何简单的方法都可以反序列化该类型的数据并将所有人放入Array()

$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';";

不使用explode()foreach()然后使用preg_match函数吗?

谢谢您的回答。

2 个答案:

答案 0 :(得分:1)

  

任何简单的方法都可以反序列化该类型的数据并将所有人放入Array()   而不使用explode(),foreach()和preg_match函数?

是的,您可以使用preg_match_all()

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
)

此方法的优点是,即使任何键或值包含分号(例如Body;StyleSEDAN;4 DOOR)也可以使explode()方法失败。

请参见https://3v4l.org/YuuZM

答案 1 :(得分:-1)

您可以使用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。看到这里:http://php.net/manual/en/function.eval.php

我假设您从其他地方获取$variable的内容。例如,是否有任何特定原因使您拥有该格式的数据,而不是json?

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