将字符串列表拆分为类似长度的新列表

时间:2015-03-27 09:16:29

标签: php list ranking

说我有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与模运算结合使用,但我似乎无法绕过它。

2 个答案:

答案 0 :(得分:0)

这并不像看起来那么困难:

// 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>';

我确定还有其他解决方案,但这似乎可以胜任。

答案 1 :(得分:0)

我认为你通过使用array_chunk和模运算以正确的方式,这是我选择的方式。

就像是:

$countarray = count($myarray);
$modulo = 2;
while ($countarray>32)
{
    $result = $countarray/$modulo;
    if($result>32)
    $modulo++;

}
$newpool = array_chunk($myarray, $modulo);

我不是php中的神,所以我希望它会有所帮助!抱歉我的英语很差。