首页 > 解决方案 > 如何将值分成两部分,同时保持所有可能页面的分页总数相等?

问题描述

我正在尝试根据两种类型的结果获取结果。首先是搜索顶部 (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]
]

标签: php

解决方案


这是一个通常循环的工作

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++;
}

推荐阅读