假设我有一个65个字符串的列表
我需要将这个列表拆分为多个具有相似字符串数量的"池"
金额不能超过32。
在这份65人的名单中,他们都排在第1位到第65位。
- 对于一个包含65个字符串的列表,它将分为一个21个池和两个22个池
- 对于一个包含34个字符串的列表,它将分为一个包含18个字符串的池和一个包含18#字符串的池
- 对于115个字符串的列表,它将分为一个28个池和三个29个池
等等。
然而,新的名单需要进行公平的排名
例如,它应该是这样的:
- 池1中的排名1
- 在池2中排名2
- 在池3中排名第3
- 在池1中排名4
- 在池2中排名5
- 在池3中排名第6
通过这种方式,排名1和排名4在他们的新列表中分别成为排名1和2
其他也一样。
我想我需要将array_chunk与模运算结合使用,但我似乎无法理解它。
这并不像看上去那么困难:
// settings
$cellCount = 115;
$maxPoolSize = 32;
// create test array with numbered strings
$testArray = array_fill(1,$cellCount,'Cell ');
foreach ($testArray as $key => $value) $testArray[$key] .= $key;
// determine the number of pools needed
$arraySize = count($testArray);
$poolCount = ceil($arraySize/$maxPoolSize);
// fill the pools
$poolNo = 0;
foreach ($testArray as $cell)
{
$poolArray[$poolNo][] = $cell;
$poolNo++;
if ($poolNo == $poolCount) $poolNo = 0;
}
// show result
echo '<pre>';
print_r($poolArray);
echo '</pre>';
我相信还有其他解决方案,但这似乎能起到作用。
我认为您的方法是正确的,使用array_chunk和模运算,这是我会选择的方法。
它会像:
$countarray = count($myarray);
$modulo = 2;
while ($countarray>32)
{
$result = $countarray/$modulo;
if($result>32)
$modulo++;
}
$newpool = array_chunk($myarray, $modulo);
我不是php的神,所以我希望它会有所帮助!抱歉我英语不好。