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

Laravel/PHP遍历数组按值类型格式化生成指定结构数组如何实现?

实现思路
  • 遍历$formData的键值对,逐行构造新子数组
  • 按优先级判断value_type:先判断是否为数字,再判断是否符合指定日期格式,都不满足则为text
  • 日期判断覆盖要求的3种格式,用Laravel自带的Carbon类做格式校验,避免手动写正则出错
代码实现

以下是Laravel环境下的简洁实现:

use Carbon\Carbon;

$newFormData = collect($formData)->map(function ($value, $key) {
    // 第一步:判断是否为数字
    if (is_numeric($value)) {
        $type = 'number';
    } else {
        // 第二步:判断是否符合指定日期格式
        $dateFormats = ['Y-m-d', 'Y/m/d', 'd/m/Y'];
        $isDate = false;
        foreach ($dateFormats as $format) {
            try {
                $date = Carbon::createFromFormat($format, $value);
                // 追加格式回验,避免2023-02-30这类非法日期被误判
                if ($date && $date->format($format) === $value) {
                    $isDate = true;
                    break;
                }
            } catch (\Exception $e) {
                // 格式不匹配直接跳过
            }
        }
        $type = $isDate ? 'date' : 'text';
    }

    return [
        'field_name' => $key,
        'value_type' => $type,
        'value' => $value,
    ];
})->values()->toArray();

// 输出验证
dd($newFormData);
注意事项
  • 判断顺序不要调整:如果先判断日期,类似2024这类纯数字年份会被判定为数字,符合需求优先级
  • 不想用Carbon的话,可以直接替换为PHP原生DateTime类,逻辑完全一致
  • 代码兼容你给出的示例输入,输出结果和要求的$newFormData结构完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03