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

PHP中如何将CSV解析后的数组拆分为表头与数据体?

拆分PHP CSV解析结果为表头和数据体

我正在开发PHP版CSV解析器,已经将CSV文件解析为包含表头行和数据行的$data数组,希望用简洁语法把$data拆分为存储表头的$header变量和存储实际数据的$body变量。

现有代码

$csvFile = file($file_name);
$data = [];
foreach ($csvFile as $line) {
    // 移除不必要的空白字符(BOM)
    $line = str_replace("\xEF\xBB\xBF", '', $line);
    $data[] = str_getcsv($line);
}

示例CSV数据

"uid","area","office","tel"
"6936","SEL","Branch 1","080-123-4567"
"6935","SEL","Branch 2","080-123-4567"
"6934","SEL","Branch 3","080-123-4567"
"6933","SEL","Branch 4","080-123-4567"
"6932","SEL","Branch 5","080-123-4567"
"6931","SEL","Branch 6","080-123-4567"
"6930","SEL","Branch 7","080-123-4567"
"6929","SEL","Branch 8","080-123-4567"
"6928","SEL","Branch 9","080-123-4567"
"6927","SEL","Branch 10","080-123-4567"
"6926","SEL","Branch 11","080-123-4567"

预期结果

$data = [
    ["uid", "area", "office", "tel"],
    ["6936", "SEL", "Branch 1", "080-123-4567"],
    ["6935", "SEL", "Branch 2", "080-123-4567"],
    ["6934", "SEL", "Branch 3", "080-123-4567"],
    ["6933", "SEL", "Branch 4", "080-123-4567"],
    ["6932", "SEL", "Branch 5", "080-123-4567"],
    ["6931", "SEL", "Branch 6", "080-123-4567"],
    ["6930", "SEL", "Branch 7", "080-123-4567"],
    ["6929", "SEL", "Branch 8", "080-123-4567"],
    ["6928", "SEL", "Branch 9", "080-123-4567"],
    ["6927", "SEL", "Branch 10", "080-123-4567"],
    ["6926", "SEL", "Branch 11", "080-123-4567"]
];
$header = ["uid", "area", "office", "tel"];
$body = [
    ["6936", "SEL", "Branch 1", "080-123-4567"],
    ["6935", "SEL", "Branch 2", "080-123-4567"],
    ["6934", "SEL", "Branch 3", "080-123-4567"],
    ["6933", "SEL", "Branch 4", "080-123-4567"],
    ["6932", "SEL", "Branch 5", "080-123-4567"],
    ["6931", "SEL", "Branch 6", "080-123-4567"],
    ["6930", "SEL", "Branch 7", "080-123-4567"],
    ["6929", "SEL", "Branch 8", "080-123-4567"],
    ["6928", "SEL", "Branch 9", "080-123-4567"],
    ["6927", "SEL", "Branch 10", "080-123-4567"],
    ["6926", "SEL", "Branch 11", "080-123-4567"]
];

简洁实现方案

方案1:使用array_shift()(兼容所有PHP版本)

// 直接修改原$data数组,取出表头
$header = array_shift($data);
$body = $data;

如果需要保留原$data数组不被修改,可以先复制一份:

$tempData = $data;
$header = array_shift($tempData);
$body = $tempData;

方案2:数组解构赋值(PHP 7.1+推荐)

// 不修改原$data数组,语法最简洁
[$header, ...$body] = $data;

这种语法直接将$data的第一个元素赋值给$header,剩余所有元素自动打包成$body数组,代码更直观简洁。

内容的提问来源于stack exchange,提问作者K.H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:00:55