Как лучше отформатировать генератор строк JSON с помощью PHP json_encode()?

#php #arrays #json

#php #массивы #json

Вопрос:

Я сохраняю данные внутри массивов с json_encode() помощью функции php, а затем кодирую их в строки json, чтобы сохранить их в одном поле базы данных.

Это то, что я делал:

 $fechaMensaje = $_POST['fechaMensaje'];
$mensaje = $_POST['mensaje'];
$estadoMensaje = 'abierto';
$data['fecha'][] = $fechaMensaje;
$data['autor'][] = $userEmail;
$data['mensaje'][] = $mensaje;
$datosMensaje = json_encode($data);
  

Это действительно работает, и это создает строку, подобную этой:

 {
"fecha":["29-09-2016 11:12:51 AM"],
"autor":["demo@example.com"],
"mensaje":["lorem ipsum"]
}
  

Это массив, который я получил при декодировании строки:

 {
    ["fecha"]=> array(1) { 
        [0]=> string(22) "29-09-2016 11:12:51 AM" 
    } 
    ["autor"]=> array(1) { 
        [0]=> string(23) "demo@example.com" 
    } 
    ["mensaje"]=> array(1) { 
        [0]=> string(11) "lorem ipsum" 
    } 
}   
  

Теперь мой вопрос в том, как я могу изменить способ генерации массива в первую очередь, чтобы вместо этого получить этот вывод? (имея три элемента в одном массиве, поэтому, когда я добавлю больше элементов, он будет более организованным).

 {
    ["0"]=> array(3) { 
        ['fecha']=> string(22) "29-09-2016 11:12:51 AM" 
        ['autor']=> string(23) "demo@example.com" 
        ['mensaje']=> string(11) "lorem ipsum" 
    } 
    [1]=> array(3) { 
        ...
        ...
        ...       
    } 
}   
  

Комментарии:

1. $data['fecha'][] вы не хотите, чтобы это [] было в конце — это присваивание данных в виде массива, а не строки, которая учитывает другую структуру.

2. Как насчет data[]['fecha'] = $fechaMensaje; и так далее?

Ответ №1:

Вы можете попробовать этот код:

 $obj['fecha'] = $fechaMensaje;
$obj['autor'] = $userEmail;
$obj['mensaje'] = $mensaje;

//insert obj to data array
$data[] = $obj;

// encoding to json 
$json = json_encode($data);
  

Ответ №2:

В приведенном ниже случае вы можете определить другой массив $some_var , содержащий каждый массив данных. Также удалите [] конец при присвоении значений для $data .

 $fechaMensaje = $_POST['fechaMensaje'];
$mensaje = $_POST['mensaje'];
$estadoMensaje = 'abierto';
$data['fecha'] = $fechaMensaje;
$data['autor'] = $userEmail;
$data['mensaje'] = $mensaje;
$some_var[0] = $data;
$datosMensaje = json_encode($some_var);