php - 如何将值分成两部分,同时保持所有可能页面的分页总数相等?
问题描述
我正在尝试根据两种类型的结果获取结果。首先是搜索顶部 (TOS),然后是非搜索顶部 (NTOS),因此在此之前使用单个查询分页很容易,但现在我从两个不同的查询中获取记录,然后将它们一起显示就很难了。我想要做的是优先考虑 TOS 结果而不是 NTOS 结果,并将每页的总结果保持在 39 个结果。所以我想制作一个数组,将结果平均分成所有可能的页面。
我试图这样做,但是当事情变得有点困难时,我无法理解这一点。所以我正在寻找答案。
$tos = 23;
$ntos = 26;
$loop = true;
$page = 1;
$numPerPage = 39;
$pageData = array();
while ($loop) {
if ($page == 1) {
$caltos = (($numPerPage - $tos) > $numPerPage ? ($numPerPage - $tos) : $tos);
$calntos = (($numPerPage - $caltos) > $ntos ? $ntos : ($numPerPage - $caltos));
} else {
foreach ($pageData as $eachPage) {
$caltos = (($numPerPage - $eachPage['tos']) > ($page * $numPerPage) ? ($numPerPage - $tos) : $tos);
$calntos = (($numPerPage - $caltos) > $ntos ? $ntos : ($numPerPage - $caltos));
}
$loop = false;
}
$pageData[$page] = array('tos' => $caltos, 'ntos' => $calntos );
$page++;
}
print_r($pageData);
我想通过给它不同的输入来期待以下结果:
1) TOS: 23 & NTOS: 26
Expected Result:
[
[1] => ['tos' => 23,'tosOffset' => 0, 'ntos' => 16, 'ntosOffset' => 0],
[2] => ['ntos' => 10, 'ntosOffset' => 16]
]
2) TOS: 49 & NTOS: 56
Expected Result:
[
[1] => ['tos' => 39, 'tosOffset' => 0],
[2] => ['tos' => 10, 'tosOffset' => 39, 'ntos' => 29, 'ntosOffset' => 0],
[3] => ['ntos' => 27, 'ntosOffset' => 29]
]
3) TOS: 0 & NTOS: 73
Expected Result:
[
[1] => ['ntos' => 39, 'ntosOffset' => 0],
[2] => ['ntos' => 34, 'ntosOffset' => 39]
]
解决方案
这是一个通常循环的工作
while ($tos or $ntos) {
$sum = min($tos, $numPerPage);
if($sum) {
$pageData[$page]['tos'] = $sum;
}
$tos -= $sum;
$rest = min($ntos, $numPerPage- $sum);
if($rest) {
$pageData[$page]['ntos'] = $rest;
}
$ntos -= $rest;
$page++;
}
推荐阅读
- python - 在使用拉长的过程打印前一行后,如何打印新行?
- c - 程序中的警告
- ruby-on-rails - Rails 传递嵌套属性但不保存关联对象
- azure-cognitive-search - Azure 搜索 - 搜索分数
- delphi - Delphi 中的 .Create 和 .Create() 有什么区别?
- python - Python if 语句混淆
- domain-driven-design - 设计电子商务微服务
- ios - 如何在没有电子邮件密码的情况下注册用户
- google-apps-script - 是否可以编写脚本将谷歌表格地址写入特定单元格?
- javascript - 从 JavaScript Web Animations API 读取样式信息,中间状态