PHP десериализованная переменная - PullRequest
0 голосов
/ 08 ноября 2018

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

Любой простой способ десериализации данных этого типа и помещения всех в 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 голосов
/ 08 ноября 2018

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

0 голосов
/ 08 ноября 2018

Вы можете использовать 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, например?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...