Laravel 7中如何将请求内的数组类型字段转为逗号拼接字符串
错误原因
你调用的Arr::where是数组过滤方法,仅会根据回调返回的布尔值决定是否保留对应数组元素,不支持修改元素取值,因此你在回调中返回拼接后的字符串并不会修改原数组,自然得不到预期结果。
正确实现代码
基于Laravel的集合工具可以快速实现需求,示例如下:
// 从请求中获取所有参数后处理 $requestFiltered = collect($request->all()) // 过滤null值和 _token 字段 ->filter(fn($value, $key) => !is_null($value) && $key !== '_token') // 数组类型值转逗号分隔字符串 ->map(fn($value) => is_array($value) ? implode(',', $value) : $value) // 转回普通数组 ->all();
如果需要兼容不支持箭头函数的低版本PHP,可以使用匿名函数写法:
$requestFiltered = collect($request->all()) ->filter(function ($value, $key) { return !is_null($value) && $key !== '_token'; }) ->map(function ($value) { return is_array($value) ? implode(',', $value) : $value; }) ->all();
扩展说明
如果你的请求参数可能存在多维数组,需要递归转换的话,可以把处理逻辑改成递归调用:
function arrayToString($value) { if (is_array($value)) { // 子元素还是数组的话先递归处理,再拼接 return implode(',', array_map('arrayToString', $value)); } return $value; } $requestFiltered = collect($request->all()) ->filter(fn($value, $key) => !is_null($value) && $key !== '_token') ->map(fn($value) => arrayToString($value)) ->all();
内容的提问来源于stack exchange,提问作者phdiasm
相关产品推荐
相关产品推荐

