Как сделать содержимое json-объектов вложенного массива php во внешнем массиве с помощью json_encode

avatar
Winnipass
7 апреля 2018 в 22:55
130
2
0

У меня есть массив:

$myAssocArray = array(
           ['fred','tyson',23],
           ['collins', 'white', 54],
           ['mary', 'frost', 46]
        );

Когда я json_encode массив:

$jsonString = json_encode($myAssocArray);
echo $jsonString;

Я получаю:

[['fred','tyson',23],['collins', 'white', 54],['mary', 'frost', 46]]

Но я хотел бы получить следующий результат:

[{0:'fred',1:'tyson',2: 23},{0:'collins', 1:'white', 2: 54},{0:'mary', 1:'frost',2: 46}]
Источник
Spoody
7 апреля 2018 в 22:59
0

Вы можете передать JSON_FORCE_OBJECT во второй аргумент json_encode, но это не даст точного значения, которое вы хотите.

Chris
7 апреля 2018 в 23:05
0

Пожалуйста, не используйте Markdown произвольно. Блоковые кавычки (>) предназначены для кавычек. Они не для акцента. См. coderhelper.com/editing-help

ankabot
7 апреля 2018 в 23:05
0

Привет, я думаю, что это ничего не значит в JSON "[{'fred','tyson',23},{'collins', 'white', 54},{'mary', 'frost', 46}]".

Chris
7 апреля 2018 в 23:06
1

(a) Ваш PHP не является ассоциативным массивом, это просто массив массивов. (b) Вывод, который вы показываете, также представляет собой массив массивов, так что это имеет смысл. (c) Ваш ожидаемый результат не является допустимым JSON. Невозможно получить этот вывод из json_encode().

Winnipass
7 апреля 2018 в 23:13
0

Кажется, это сработало после того, как я привел подмассивы к объектам.

Winnipass
7 апреля 2018 в 23:41
0

Вы правы, должно быть что-то вроде '[{"0":"collins","1":"white"}]'. Я просто пытался описать проблему, не обязательно правильно понимать синтаксис.

Ответы (2)

avatar
Pedro Lobito
8 апреля 2018 в 01:17
0

Преобразуйте array в object (object)$array, например:

function _json_encode($arr){
   return json_encode((object)$arr); 
}

$jsonString = _json_encode($myAssocArray);
print_r($jsonString);
avatar
Winnipass
7 апреля 2018 в 23:08
0

Нашел решение, мне пришлось привести вложенный массив к объектам

(object) $myDynamicNestedArray;

PHP json_encode - JSON_FORCE_OBJECT смешанный вывод объекта и массива

Winnipass
7 апреля 2018 в 23:48
0

Крис, я понимаю, что вывод, который я набрал в вопросе, недействителен json (я просто использовал свободный стиль на клавиатуре, не проверяя синтаксис), но проблема все еще актуальна, если вы измените его на допустимую строку json

Winnipass
8 апреля 2018 в 00:01
0

Я только что отредактировал окончательный вывод json в вопросе. Касаемо ответа. $dataArray->push((object)$data->all()); $dataArray->toJson(); в итоге дал мне результат, которого я ожидал