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

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;

代码逻辑解释

  1. 先固定行数为3,这是你的TCPDF盒子的最大支持行数;
  2. 遍历原数组时,通过$index % $totalRows计算元素归属的行:比如索引0、3、6对3取余都是0,对应第一行的A、D、G;索引1、4、7取余为1,对应第二行的B、E、H;索引2、5取余为2,对应第三行的C、F;
  3. 最后用implode把每行的数组元素拼成空格分隔的字符串,正好得到你需要的三个变量。

这个方法不管数组长度是1到9之间的任何值,都能正确生成对应的分组,逻辑清晰且效率很高,完全避开了array_chunk的限制。


内容的提问来源于stack exchange,提问作者Giuseppe Lodi Rizzini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:40:32