I have an array contain a list of courses
$courses = ['php', 'mysql', 'java', 'ruby'];
I have also a function that helps me to split this array into pieces, depends on the number of the giving years.
this is my function:
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;
}
The output is fine if I pass the number 1 or 2 or 4 in the$periodicity
parameter
I'm having the bug only when I pass number 3 as$periodicity
, with 4 courses in my array
I get:
[
[
'php',
'mysql'
],
[
'java',
'ruby'
]
]
as you can see I'm getting 2 courses each year, since I passed 3 as periodicity.
The expected result in that case should be:
[
[
'php'
],
[
'mysql'
],
[
'java',
'ruby'
]
]
This solves it slightly differently.
First is to split up the even segments, this is the first set of elements which are split with the same amount of elements(so the first 2 items in your example). Also note that instead of usingceil()
, I usefloor()
to round down the value.
Then the remaining elements are added in one chunk to the end of the array.
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;
}
You can very easily spread with modulus. But the complicated thing is to put the remaining at bottom.
$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"]]
Here a simpler version, if you don't need the rest have in the bottom.
$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"]]
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Find the answer in similar questions on our website.
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.
PHP (from the English Hypertext Preprocessor - hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites.
The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/
DBMS is a database management system. It is designed to change, search, add and delete information in the database. There are many DBMSs designed for similar purposes with different features. One of the most popular is MySQL.
It is a software tool designed to work with relational SQL databases. It is easy to learn even for site owners who are not professional programmers or administrators. MySQL DBMS also allows you to export and import data, which is convenient when moving large amounts of information.
https://www.mysql.com/
Welcome to the Q&A site for web developers. Here you can ask a question about the problem you are facing and get answers from other experts. We have created a user-friendly interface so that you can quickly and free of charge ask a question about a web programming problem. We also invite other experts to join our community and help other members who ask questions. In addition, you can use our search for questions with a solution.
Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.
Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.