大家下午好
任何简单的方法都可以反序列化该类型的数据并将所有人放入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
函数吗?
谢谢您的回答。
答案 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;Style
或SEDAN;4 DOOR
)也可以使explode()
方法失败。
答案 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?
编辑:我刚刚意识到代码无法按原样工作,因为数组的值由分号而不是冒号分隔。您需要先用冒号替换分号。我已经更新了代码以反映这一点。