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

如何解析数据库返回的多行列分隔文本为PHP关联数组?

解决文本解析生成指定关联数组的问题

问题分析

你当前的处理方式把所有内容用=拼接后拆分,导致表头、空行和数据混在一起,丢失了行的边界信息,后续的循环赋值逻辑也错误(每次循环都覆盖了$result,没有正确累加条目),所以得不到预期结构。

正确解决方案

我们可以按行处理文本,过滤掉空行和表头,再逐行提取需要的字段,具体步骤如下:

  1. 将原始文本按行拆分;
  2. 遍历每一行,跳过空行和表头行;
  3. 对有效行用=分割,去除每个字段的空格;
  4. 提取前两个字段(日期和费用),转换为对应类型后组装成目标结构。

完整代码示例

<?php
// 原始数据
$data = <<<DATA
DATE      = FEE = PAYMENT
2021-03-09 = 119.25 = 119.25 = 2021-04-13

2021-03-15 = 119.25 = 119.25 = 2021-04-13
DATA;

$result = [];
// 按行拆分文本
$lines = explode(PHP_EOL, $data);

foreach ($lines as $line) {
    // 去除行首尾空格
    $trimmedLine = trim($line);
    // 跳过空行和表头行
    if (empty($trimmedLine) || str_starts_with($trimmedLine, 'DATE')) {
        continue;
    }
    // 用=分割每行,并去除每个字段的空格
    $fields = array_map('trim', explode('=', $trimmedLine));
    // 提取日期和费用,组装目标数组
    $result[] = [
        'Date' => $fields[0],
        'fee' => (float)$fields[1],
        'title' => 'example'
    ];
}

// 输出格式化后的结果
echo json_encode($result, JSON_PRETTY_PRINT);
?>

执行结果

运行后会得到符合预期的结构:

[
    {
        "Date": "2021-03-09",
        "fee": 119.25,
        "title": "example"
    },
    {
        "Date": "2021-03-15",
        "fee": 119.25,
        "title": "example"
    }
]

补充说明

  • 使用str_starts_with需要PHP 8.0+,如果是低版本PHP,可以用substr($trimmedLine, 0, 4) === 'DATE'替代;
  • array_map('trim', ...)确保每个字段的前后空格被清除,避免提取到带空格的无效值;
  • 将费用字段转为float类型,符合预期的数值格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:35:24