PHP数组生成XLS文件行列错乱问题求助(基于php-excel类)
解决PHP-Excel XML类行列结构不符预期的问题
我帮你搞定这个问题!问题出在你给Excel_XML类的数据结构上——这个类是把每个子数组当成一行来处理的,但你现在的$example、$example2、$example3其实是列数据,所以才会出现行列颠倒的情况。
核心解决方案:转置数据结构
你需要把列格式的数据转换成行格式,也就是将[a1,a2,a3]、[b1,b2,b3]、[c1,c2,c3]转成[a1,b1,c1]、[a2,b2,c2]、[a3,b3,c3]。PHP的array_map函数可以轻松实现这个转置操作。
完整修正代码
// 定义表头 $headers = array("A","B","C"); // 原始列数据 $example = array("a1","a2","a3"); $example2 = array("b1","b2","b3"); $example3 = array("c1","c2","c3"); // 转置列数据为行数据:将每列的对应元素组合成一行 $transposedRows = array_map(null, $example, $example2, $example3); // 构建符合要求的结果数组:表头 + 转置后的行数据 $result = array_merge([$headers], $transposedRows); // 实例化类并生成Excel文件 $excel = new Excel_XML('UTF-8', false, 'My Custom Excel'); $excel->addArray($result); $excel->generateXML('output_excel');
代码解释
array_map(null, $example, $example2, $example3):当第一个参数为null时,array_map会把后续每个数组的第n个元素取出,组合成一个新数组,完美实现列到行的转置。array_merge([$headers], $transposedRows):把表头数组和转置后的行数据合并成最终的二维数组,这样Excel_XML类就能按你期望的行列结构生成文件了。
如果后续有更多列数据,只需要把新的列数组作为参数添加到array_map里即可,它会自动处理所有对应位置的元素组合。
内容的提问来源于stack exchange,提问作者Word To
相关产品推荐
相关产品推荐

