我有一个包含课程列表的数组
$courses = ['php', 'mysql', 'java', 'ruby'];我也有一个函数来帮助我把这个数组分割成几个部分,这取决于给出的年数。
这是我的职责:
public function planner($courses, $periodicity, $preserve_keys = null)
{
$nbr = (int) ceil(count($courses) / $periodicity);
if($nbr > 0){
return array_chunk($courses, $nbr, $preserve_keys);
}
return $courses;
}如果我在参数中传递数字1或2或4,那么输出是很好的--只有当我将数字3作为$periodicity传递时,才会有错误,而数组中有4个课程
我得到:
[
[
'php',
'mysql'
],
[
'java',
'ruby'
]
]如你所见,我每年都有2门课,因为我通过了3门周期性课程。
这种情况的预期结果应是:
[
[
'php'
],
[
'mysql'
],
[
'java',
'ruby'
]
]发布于 2022-11-15 19:54:01
这稍微不同地解决了它。
首先是分割偶数段,这是用相同数量的元素分割的第一组元素(您的示例中的前2项)。还要注意的是,我没有使用ceil(),而是使用floor()来舍入值。
然后将剩余的元素添加到数组末尾的一个块中。
function planner($courses, $periodicity, $preserve_keys = false)
{
$nbrDays = (int) floor(count($courses) / $periodicity);
if ($nbrDays > 0) {
$initialSplit = array_slice($courses, 0, $nbrDays * ($periodicity - 1), $preserve_keys);
$split = array_chunk($initialSplit, $nbrDays, $preserve_keys);
// Add in the remaining elements
$split[] = array_slice($courses, $nbrDays * ($periodicity - 1), null, $preserve_keys);
return $split;
}
return $courses;
}发布于 2022-11-15 20:31:46
你可以很容易地扩展模数。但复杂的事情是把剩下的东西放在底部。
$planner = function (array $plans, int $periods): array {
$result = [];
$i = 0;
$remain = count($plans) % $periods;
$last = count($plans) - $remain;
while ($plan = current($plans)) {
if ($last === $i) break;
$result[$i++ % $periods][] = $plan;
next($plans);
}
while ($remain-- > 0) {
$result[$i - 1][] = current($plans);
next($plans);
}
return $result;
};
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 1)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 2)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 3)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 4)), "\n";输出
[["php","mysql","java","ruby"]]
[["php","java"],["mysql","ruby"]]
[["php"],["mysql"],["java","ruby"]]
[["php"],["mysql"],["java"],["ruby"]]不同结果的替代版本
这里有一个更简单的版本,如果你不需要剩下的在底部。
$planner = function (array $plans, int $periods): array {
$result = [];
$i = 0;
foreach ($plans as $plan) {
$result[$i++ % $periods][] = $plan;
}
return $result;
};
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 1)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 2)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 3)), "\n";
echo json_encode($planner(['php', 'mysql', 'java', 'ruby'], 4)), "\n";输出
[["php","mysql","java","ruby"]]
[["php","java"],["mysql","ruby"]]
[["php","ruby"],["mysql"],["java"]]
[["php"],["mysql"],["java"],["ruby"]]https://stackoverflow.com/questions/74451166
复制相似问题