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.
相关产品推荐
相关产品推荐

