Массив PHP в json без индексов

Я новичок в PHP и пытаюсь преобразовать массив в json без индексов.

Например, у меня есть:

[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]

Мне нужно, чтобы это был один объект json:

{
"name":"Dean,
"last_name":"Don",
"age":31,
"height":181
}

Я попытался использовать json_encode(), но все, что я получил, неверно, я попытался указать JSON_FORCE_OBJECT, который ставит индексы, которые мне не нужны.

У кого-нибудь есть идеи, как это решить? Спасибо

Покажите нам, что вы пробовали, возможно, вы ближе к ответу, чем думаете

RiggsFolly 14.05.2018 17:10

Конечно, было бы лучшая идея, чтобы посмотреть, как вам удалось создать первую строку JSON и исправить это, вместо того, чтобы пытаться возиться с плохим результатом

RiggsFolly 14.05.2018 17:11

Записываемый вами массив не является допустимым массивом php.

T30 14.05.2018 17:11

@ T30 Я думаю, что это строковое представление массива объектов в формате JSON.

RiggsFolly 14.05.2018 17:12

Решением может быть выполнение json_decode и цикл результатов для создания нового массива.

T30 14.05.2018 17:13
Покажите нам код, который вы использовали для создания начальной строки JSON
RiggsFolly 14.05.2018 17:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
2 564
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

ты пробовал json_encode(array_values($array))?

Не могли бы вы объяснить, как это поможет в создании единого объекта JSON?

Don't Panic 14.05.2018 17:20

подробнее см. здесь: stackoverflow.com/questions/11195692/…

Dev web 14.05.2018 17:33

Не знаю, какое отношение эта ссылка имеет к этому вопросу.

iainn 14.05.2018 17:37

Вы можете использовать json_decode для преобразования json в массив. Используйте array_reduce, чтобы создать новый массив. Используйте json_encode, чтобы снова преобразовать массив в json

$str = '[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]';

//Convert the json into array
$arr = json_decode($str, true);

//Make the multi dementional array into an associative array
$arr = array_reduce($arr, function($c, $v){
    foreach ($v as $key => $val) $c[$key] = $val;
    return $c;
}, array());

//Convert the array to json
$result = json_encode($arr);

echo $result;

Это приведет к:

{"name":"Dean","last_name":"Don","age":31,"height":181}

Все же было бы лучше исправить первоначальные ошибки создания, поскольку исходная строка JSON действительно бесполезна ни для человека, ни для зверя.

RiggsFolly 14.05.2018 17:19

Первый бит JSON выглядит как результат кодирования массива пар ключ-значение следующим образом:

$data = [
    ['name' => 'Dean'],
    ['last_name' => 'Don'],
    ['age' => 31],
    ['height' => 181]
];

Если это то, с чего вы начинаете, вы можете перебрать набор атрибутов и создать сущность, которая будет кодировать один объект.

foreach ($data as $attribute) {
    $entity[key($attribute)] = reset($attribute);
}

echo json_encode($entity);

Как упоминалось в комментариях, может быть - лучший способ сделать это раньше в вашем коде, поэтому вы можете создать объект, который вы хотите в первую очередь, вместо чего-то вроде примера $data, который вам придется повторно обработать, прежде чем вы сможете выведите его.

Ответ принят как подходящий

Другой способ - декодировать, объединить и перекодировать:

$json = '[{"name":"Dean"},{"last_name":"Don"},{"age":31},{"height":181}]';
$data = json_decode($json,true); // decode
$data = array_merge(...$data); // merge
echo json_encode($data, JSON_PRETTY_PRINT); // recode

Выход:

{
    "name": "Dean", 
    "last_name": "Don", 
    "age": 31, 
    "height": 181 
}

Я согласен, что array_merge идеально подходит для этого.

Don't Panic 14.05.2018 17:37

Другие вопросы по теме