Я новичок в 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
, которые ставят индексы, которые я не хочу.
У кого-нибудь есть идеи как это решить?
Спасибо
Ты можешь использовать 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 выглядит как результат кодирования массива пар ключ-значение следующим образом:
$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
}
ты пробовал
json_encode(array_values($array))
?