Laravel-将多个数组合并到一个对象中

时间:2018-08-19 22:55:00

标签: php laravel

假设我有使用Laravel 5.6的PHP代码:

$action = [
    [
        "name" => "action",
        "value" => "DepositMoney"
    ],
    [
        "name" => "coins",
        "type" => "number",
        "value" => "534"
    ]
];

return collect($action)->map(function($item, $key) {
    return [
        $item['name'] => $item['value']
    ];
});

产生:

[
  {
    "action": "DepositMoney"
  },
  {
    "coins": "534"
  }
]

我如何做到这一点,以便可以将它们合并在一起并生成它(使用此处的内容:https://laravel.com/docs/5.6/eloquent-collections#available-methods):

[
    "action" => "DepositMoney",
    "coins" => "534"
]

谢谢。这是针对form_params的Guzzle。

2 个答案:

答案 0 :(得分:2)

您需要reduce()函数,以便从数组的多个元素创建单个值。文档在这里:https://laravel.com/docs/5.6/collections#method-reduce

我建议尝试一下(我没有测试,但是您明白了,应该可以从此示例中了解如何使用reduce

return collect($action)->map(function($item, $key) {
    return [
        $item['name'] => $item['value']
    ];
})->reduce(function ($carry, $item) {
    foreach ($item as $k => $v) {
        $carry[$k] = $v;
    }
    return $carry;
});

答案 1 :(得分:1)

很简单,对结果运行collapse()方法如下:

return collect($action)->map(function($item, $key) {
    return [
        $item['name'] => $item['value']
    ];
})->collapse();

//Gives you:

{
  "action": "DepositMoney",
  "coins": "534"
}

请参见FreshMvvm,否则,您可以使用其他数组帮助器,例如Method Collapse函数:

return array_collapse(array_map(function($item) {
        return [
            $item['name'] => $item['value']
        ];
   }, $action));