PHP如何将键相同但值和顺序不同的多维数组导出为CSV文件
问题根源
- 原有遍历逻辑错误:直接遍历外层的语言维度,导致每一行对应一种语言,而非同一键的多语言值
- 子数组内部键顺序不统一,直接调用
array_values()会按数组当前的内部顺序取值,导致列错位
修正代码
固定语言版本(适配你当前的数组结构)
$header = array( 'Key', 'English', 'Spanish', 'German' ); $f_name = 'lang.csv'; header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=$f_name"); $output = fopen("php://output" , "w"); // 可选:添加UTF-8 BOM,解决Excel打开乱码问题 fwrite($output, "\xEF\xBB\xBF"); fputcsv($output, $header); // 获取所有公共键并升序排序,保证行顺序统一 $allKeys = array_keys(reset($array)); sort($allKeys); // 按统一键遍历,组装同一键的多语言值 foreach ($allKeys as $key) { $row = [ $key, $array['English'][$key], $array['Spanish'][$key], $array['German'][$key] ]; fputcsv($output, $row); } fclose($output);
通用动态版本(适配语言数量动态变化的场景)
$f_name = 'lang.csv'; header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=$f_name"); $output = fopen("php://output" , "w"); // 可选:添加UTF-8 BOM,解决Excel打开乱码问题 fwrite($output, "\xEF\xBB\xBF"); // 自动生成表头 $languages = array_keys($array); $header = array_merge(['Key'], $languages); fputcsv($output, $header); // 获取所有公共键并升序排序 $allKeys = array_keys(reset($array)); sort($allKeys); foreach ($allKeys as $key) { $row = [$key]; foreach ($languages as $lang) { // 兼容部分语言缺失对应键的场景 $row[] = $array[$lang][$key] ?? ''; } fputcsv($output, $row); } fclose($output);
内容的提问来源于stack exchange,提问作者Ahmad Mardini
相关产品推荐
相关产品推荐

