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, которые ставят индексы, которые я не хочу.

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

-1

Решение

Ты можешь использовать 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}
1

Другие решения

Первый бит 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 пример того, что вам придется повторно обработать, прежде чем вы сможете вывести его.

1

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

$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
}
1

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector