сериализация — PHP десериализовать переменную

Добрый день всем,

Есть ли простой способ десериализации данных такого типа и помещения всех в 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

Решение

Есть ли простой способ десериализации данных такого типа и помещения всех в 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

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, например?

РЕДАКТИРОВАТЬ: я только что понял, что код не будет работать как есть, потому что значения массива разделяются точкой с запятой, а не двоеточия. Сначала нужно заменить точку с запятой на двоеточие. Я обновил код, чтобы отразить это.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector