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

如何按指定表头读取数组记录并生成4列结构化数组?

按表头列边界拆分固定对齐文本为结构化数组

核心思路

这类固定列宽对齐的文本,核心是先通过表头确定每一列的起始位置边界,再用这些边界去切割每一行的内容,最终得到结构化的键值对数组。

具体实现(PHP示例)

假设$rolerows是存储了所有行的数组,代码如下:

// 第一步:清理数组中的空行,仅保留有效内容行
$validRows = array_filter($rolerows, function($row) {
    return trim($row) !== '';
});

// 第二步:提取表头行的列边界位置
$headerRow = reset($validRows);
// 匹配表头中所有非空格字段,同时获取每个字段的起始索引
preg_match_all('/\S+/', $headerRow, $headerMatches, PREG_OFFSET_CAPTURE);
// 提取各列的起始偏移量,最后追加字符串长度作为最后一列的结束边界
$columnOffsets = array_column($headerMatches[0], 1);
$columnOffsets[] = strlen($headerRow);

// 第三步:遍历数据行,按列边界切割生成结构化数组
$structuredRoles = [];
foreach (array_slice($validRows, 1) as $dataRow) {
    $roleItem = [];
    foreach ($headerMatches[0] as $index => $headerInfo) {
        $colName = $headerInfo[0];
        $start = $columnOffsets[$index];
        $end = $columnOffsets[$index + 1];
        // 截取列内容并去除前后冗余空格
        $colValue = trim(substr($dataRow, $start, $end - $start));
        $roleItem[$colName] = $colValue;
    }
    $structuredRoles[] = $roleItem;
}

// 输出结构化后的数组
print_r($structuredRoles);

关键说明

  • 空行清理:避免处理无意义的空白内容,保证后续解析的准确性
  • 列边界获取:通过正则匹配表头的非空格字段,拿到每个列的起始位置,这是实现精准切割的核心
  • 内容切割:按起始/结束位置截取每行文本,再用trim去除列内前后的冗余空格,得到干净的字段值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:04