Добрый день всем,
Есть ли простой способ десериализации данных такого типа и помещения всех в 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
функции?
Спасибо за ответ.
Есть ли простой способ десериализации данных такого типа и помещения всех в 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()
сбой подхода.
Увидеть https://3v4l.org/YuuZM
Ты можешь использовать 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, например?
РЕДАКТИРОВАТЬ: я только что понял, что код не будет работать как есть, потому что значения массива разделяются точкой с запятой, а не двоеточия. Сначала нужно заменить точку с запятой на двоеточие. Я обновил код, чтобы отразить это.