PHP中将数组转为适配TCPDF的三行多列格式
问题:将一维数组转换为按列填充的多行分组数组(适配TCPDF显示)
假设我们有这样的一维数组:
$array = array( 0 => "A", 1 => "B", 2 => "C", 3 => "D", 4 => "E", 5 => "F", 6 => "G", 7 => "H", );
这个数组的最大长度为9(索引最大到8),最少包含1个元素。现在需要把它转换成按列优先填充的分组数组,最终得到这样的结构:
Array ( [0] => Array ( [0] => A [1] => D [2] => G ) [1] => Array ( [0] => B [1] => E [2] => H ) [2] => Array ( [0] => C [1] => F ) )
目的是为了在TCPDF高度受限的盒子里用writeHTML显示,最多支持3行,超出的元素排到第一列右侧,最终生成三个字符串分别对应每行内容,且不能使用array_chunk方法。
实现思路与代码
我来给你分享个高效的实现思路,完全贴合你的需求:核心是按列优先的逻辑分配元素——因为要固定3行,所以我们可以通过元素索引的余数来判断它属于哪一行,直接把元素“归位”到对应的行数组里。
直接上可运行的代码:
$originalArray = array(0 => "A", 1 => "B", 2 => "C", 3 => "D", 4 => "E", 5 => "F", 6 => "G", 7 => "H"); $totalRows = 3; // TCPDF盒子支持的固定行数 $totalElements = count($originalArray); // 初始化结果数组:3个空数组对应3行 $result = array_fill(0, $totalRows, array()); foreach ($originalArray as $index => $value) { // 用索引对行数取余,确定当前元素属于哪一行 $targetRow = $index % $totalRows; $result[$targetRow][] = $value; } // 生成需要的三个行字符串 $line1 = implode(' ', $result[0]); $line2 = implode(' ', $result[1]); $line3 = implode(' ', $result[2]); // 验证输出 print_r($result); echo "\n"; echo $line1 . "\n" . $line2 . "\n" . $line3;
代码逻辑解释
- 先固定行数为3,这是你的TCPDF盒子的最大支持行数;
- 遍历原数组时,通过
$index % $totalRows计算元素归属的行:比如索引0、3、6对3取余都是0,对应第一行的A、D、G;索引1、4、7取余为1,对应第二行的B、E、H;索引2、5取余为2,对应第三行的C、F; - 最后用
implode把每行的数组元素拼成空格分隔的字符串,正好得到你需要的三个变量。
这个方法不管数组长度是1到9之间的任何值,都能正确生成对应的分组,逻辑清晰且效率很高,完全避开了array_chunk的限制。
内容的提问来源于stack exchange,提问作者Giuseppe Lodi Rizzini
相关产品推荐
相关产品推荐

