You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 13:54:04