将对象数组合并为具有唯一对象的数组

3
我有一个包含各种对象的数组,但我需要将这些对象转换为唯一的对象。下面是我的代码分享。
$result = [];
$idiomas = Idioma::all()->toArray();

foreach ($idiomas as $lang) {
    $result[] =  [
      $lang['palavra_chave'] => $lang[$id]
    ];
}

return response()->json($result);

响应

[
  { "INICIAL": "Inicial"},{ "RELATORIOS": "Relatórios"},{ "FUNCIONARIO": "Funcionário"},{ "DATA": "Data"},{ "ANEXAR_IMAGEM": "Anexar imagem"},{ "DISCIPLINA": "Disciplina"}
]

但我需要将这些对象转换成一个对象,就像这样

[
    {
        "INICIAL": "Inicial",
        "RELATORIOS": "Relatórios",
        "FUNCIONARIO": "Funcionário",
        "DATA": "Data",
        "ANEXAR_IMAGEM": "Anexar imagem",
        "DISCIPLINA": "Disciplina"
    }
]

有人能帮助我吗?

这段话与IT技术无关。
2个回答

2
$idiomas = Idioma::all()->toArray();

if (count($idiomas)) {
    //$result = new stdClass; # wouldn't work without base namespace
    $result = new \stdClass;
    foreach ($idiomas as $lang) {
        $result->{$lang['palavra_chave']} = $lang[$id];
    }
    return response()->json([$result]);
}

// otherwise

1
谢谢。只需记住,在Laravel中,您必须编写$o = new \stdClass()或在文件顶部添加use语句。 - Paulinho Rodrigues
@PaulinhoRodrigues 刚刚在这里检查了一些代码。你是对的,我的意思是我在那里使用了反斜杠。正在编辑。 - Tpojka

0

编辑:@Tpojka的答案似乎更合适。 如果您无法更改最初检索数据的方式(我对Laravel不熟悉),则只使用以下内容应该可以:

以下内容应该有效:

// Take your initial JSON
$input = <<<JSON
[
  { "INICIAL": "Inicial"},{ "RELATORIOS": "Relatórios"},{ "FUNCIONARIO": "Funcionário"},{ "DATA": "Data"},{ "ANEXAR_IMAGEM": "Anexar imagem"},{ "DISCIPLINA": "Disciplina"}
]
JSON;

// Transform it into a PHP array
$input_as_array = json_decode($input);

// Reduce it into an associative array
$associative_array = array_reduce($input_as_array, function($associative_array, $item) {
    return $associative_array += (array)$item;
}, []);

// Encode it back into JSON, as an array
$result = json_encode([$associative_array], JSON_PRETTY_PRINT);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接