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

Laravel如何根据键名前缀将请求数组拆分为id和file两类数组

Laravel 后端拆分请求参数方案

下面提供两种常用实现方式:

方案1:使用Laravel集合处理(代码最简洁)

Laravel 8及以上版本可直接用内置的str_starts_with辅助函数:

// 获取全部请求参数
$allParams = request()->all();

// 提取id开头的参数数组
$idArray = collect($allParams)->filter(fn ($val, $key) => str_starts_with($key, 'id_'))->all();

// 提取file开头的参数数组
$fileArray = collect($allParams)->filter(fn ($val, $key) => str_starts_with($key, 'file_'))->all();

如果是Laravel 8以下版本,替换为Str门面实现前缀判断:

use Illuminate\Support\Str;

$allParams = request()->all();
$idArray = collect($allParams)->filter(fn ($val, $key) => Str::startsWith($key, 'id_'))->all();
$fileArray = collect($allParams)->filter(fn ($val, $key) => Str::startsWith($key, 'file_'))->all();

方案2:原生foreach遍历(兼容性最高)

不需要依赖Laravel集合特性,直接遍历参数即可:

$idArray = [];
$fileArray = [];

foreach (request()->all() as $key => $value) {
    if (str_starts_with($key, 'id_')) {
        $idArray[$key] = $value;
        // 如果需要把id后的数字当键名,也可以这么处理:
        // $index = ltrim($key, 'id_');
        // $idArray[$index] = json_decode($value, true);
    } elseif (str_starts_with($key, 'file_')) {
        $fileArray[$key] = $value;
        // 建议文件参数用request()->file()方法获取,可直接拿到上传文件实例:
        // $index = ltrim($key, 'file_');
        // $fileArray[$index] = request()->file($key);
    }
}

额外优化建议

你前端传参时可以直接用数组格式的键名,不需要手动拼接id_、file_前缀,后端可以直接提取对应数组,不需要额外拆分:
前端代码修改示例:

const formData = new FormData();
for (var key in this.equipments) {
  // 用ids[]格式传参
  formData.append(`ids[${key}]`, JSON.stringify(this.equipments[key]));
}
this.equipments.forEach((item, idx) => {
  // 用files[]格式传参
  formData.append(`files[${idx}]`, item.New_Cert);
});
axios
  .post("/equipments/calibration", formData, {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  })

后端直接获取即可:

$idArray = request()->input('ids');
$fileArray = request()->file('files');

内容的提问来源于stack exchange,提问作者Hanyi Koh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:39:04