假设我有使用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。
答案 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));