PHP массив в JSON без индексов - PullRequest
0 голосов
/ 14 мая 2018

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

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

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

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

$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 
}
0 голосов
/ 14 мая 2018

Вы можете использовать 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}
0 голосов
/ 14 мая 2018

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

0 голосов
/ 14 мая 2018

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

...