Разобрать строку в массив, например данные формы CakePHP

Я ищу способ синтаксического анализа строк в массиве в массив, который имеет шаблон, аналогичный тому, как CakePHP обрабатывает данные POST. Или даже функцию в CakePHP, которая это сделает.

ОБНОВЛЕНО:

Текущий массив:

array(
    'data[callers]' => (int) 4,
    'data[status]' => 'Unknown',
    'data[country_id][107]' => (int) 1,
    'data[country_id][150]' => (int) 0
)

Желаемый результат:

array(
    'callers' => (int) 4,
    'status' => 'Unknown',
    'country_id' => array(
        (int) 107 => (int) 1,
        (int) 150 => (int) 0
    )
)

Целью является сохранение сериализованных данных формы, которые впоследствии могут быть переданы функции PHP без необходимости POST данных из браузера.

Данные поступают из формы, которая была сериализована и сохранена в базе данных. CakePHP генерирует входные имена в форме с такими скобками: data[country_id][107] и внутри контроллера вы можете получить к ним доступ вот так $this->request->data['country_id']['107'] Но когда я сериализую форму с помощью javascript и сохраняю необработанную строку JSON в базе данных, мне нужен способ превратить ее в массив, как это делает CakePHP.


person Morten Twellmann    schedule 19.04.2017    source источник
comment
Было бы лучше, если бы вы опубликовали допустимый синтаксис PHP, т.е. фактический дамп, созданный debug(). Глядя на текущий массив, трудно сказать, являетесь ли вы просто творческим или предполагается, что значения в левой части напоминают простые строковые клавиши. Также поможет знание контекста, т. е. откуда исходный массив?   -  person ndm    schedule 20.04.2017
comment
@ndm Я обновил квест, чтобы было более понятно, что я пытаюсь решить.   -  person Morten Twellmann    schedule 21.04.2017
comment
Могу я спросить, почему вы сохраняете его как необработанную строку json в своей БД и не форматируете ее в поля перед сохранением? похоже, вы усложняете себе жизнь.   -  person Jason Joslin    schedule 22.04.2017
comment
@JasonJoslin У меня есть форма с множеством разных полей, которые в основном являются настройками приложения. Поля используются для генерации SQL-запроса путем отправки данных формы на сервер. Пользователь может сохранить свои настройки и позже загрузить те же настройки в форму. Сохраняю настройки с помощью jsonify и загружаю их обратно в форму с помощью dejsonify через AJAX. Но теперь, когда я пишу это, я понял, что, вероятно, излишне усложняю. Я мог бы просто json_encode массив и сохранить его в БД...   -  person Morten Twellmann    schedule 22.04.2017


Ответы (1)


Сначала убедитесь, что ваш массив действителен, например:

$data = array (
    'callers' => 4,
    'status' => 'Unknown',
    'country_id' => array(
        '107' => 0,
        '150' => 0
    )
);

КОДИРОВАНИЕ JSON

Теперь вы можете закодировать его в json.

 $json = json_encode($data);
 echo $json; // prints: {"callers":4,"status":"Unknown","country_id":{"107":0,"150":0}}

См. ^ теперь это строка.

http://php.net/manual/en/function.json-encode.php

ДЕКОДИРОВАНИЕ JSON

Затем, когда вам это нужно как массив, вызовите json_decode()

json_decode($data, true);

Обратите внимание, что второй параметр устанавливает для возвращаемого массива значение true, иначе вы получите json, возвращаемый как объект.

http://php.net/manual/en/function.json-decode.php

person Jason Joslin    schedule 20.04.2017
comment
Я думаю, что мой вопрос не был понят. Я отредактировал пост, чтобы сделать его более понятным. - person Morten Twellmann; 21.04.2017