[
原数组结构
[
[
'id'=>1,'list' => [[],[],[]]
],
[
'id'=>1,'list' => [[],[],[],[]]
]
]
最终实现结构
[
[
[
'id'=>1,'list' => [[],[],[]]
],
[
'id'=>2,'list' => [[]]
]
],
[
[
'id'=>2
'list' => [[],[],[]]
],
]
]
function paginateDataList($finalResult, $maxSize = 4) {
$result = [];
$currentGroup = [];
$currentLength = 0;
foreach ($finalResult as $item) {
$itemLength = count($item['list']) + 1; // list长度 + 二维码
// 如果当前项的长度超过允许的最大长度,则拆分datalist
while ($currentLength + $itemLength > $maxSize) {
$spaceLeft = $maxSize - $currentLength;//数组分段结束位置
if ($spaceLeft > 1) {
// 从datalist中分出一部分放入当前组
$currentGroup[] = [ 'list' => array_splice($item['list'], 0, $spaceLeft - 1)]
+ array_diff_key($item, ['list' => []]);
}
$result[] = $currentGroup;
// 将当前组放入结果集,并重置
$currentGroup = [];
$currentLength = 0;
$itemLength = count($item['list']) + 1; // 更新剩余部分的长度
}
// 添加剩余部分到当前组
$currentGroup[] = $item;
$currentLength += $itemLength;
}
// 将最后一组加入结果集
if (!empty($currentGroup)) {
$result[] = $currentGroup;
}
return $result;
}