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
)