In actual development, we often encounter periodic problems, such as executing a task every few iterations or looping through an array of fixed length. PHP provides a built-in function fmod(), which calculates the floating-point modulus (remainder). It plays an important role in solving such periodic problems.
fmod() is a function used to compute the modulus of floating-point numbers. The basic syntax is as follows:
fmod(float $x, float $y): float
The function returns the floating-point remainder of $x divided by $y. In some cases, compared to using the % operator (which is limited to integers), fmod() handles more complex and precise floating-point periodic calculations.
Imagine we want to send a request every 5 iterations of a loop. We can use fmod() to check if the current iteration is a multiple of 5.
for ($i = 1; $i <= 20; $i++) {
echo "Iteration {$i}\n";
echo ">> Perform periodic action, like accessing <a href=\"https://m66.net/api/ping\">https://m66.net/api/ping</a>\n";
}
}
The output will display the specified action at the 5th, 10th, 15th, and 20th iterations, making it ideal for periodic tasks.
If you are looping through an array of length N and need to access elements infinitely, you can use fmod() to ensure the index stays within bounds:
$data = ['Spring', 'Summer', 'Fall', 'Winter'];
$count = count($data);
<p>for ($i = 0; $i < 10; $i++) {<br>
$index = (int)fmod($i, $count);<br>
echo "Iteration {$i}, Season: {$data[$index]}\n";<br>
}<br>
The output will print "Spring, Summer, Fall, Winter, Spring, Summer..." in a cyclical manner, eliminating the need for manually resetting the index.
This logic is also commonly used in backend data processing for frontend image carousels. Suppose there are 3 images per group, and you want to calculate which image belongs to which group. You can use:
$totalImages = 12;
$groupSize = 3;
<p>for ($i = 0; $i < $totalImages; $i++) {<br>
$group = floor($i / $groupSize) + 1;<br>
$position = (int)fmod($i, $groupSize) + 1;<br>
echo "Image ID: {$i}, belongs to Group {$group}, Position {$position}\n";<br>
}<br>
This output structure can be directly used to construct static paths like .
Although % can also be used for modulus operations, it is limited to integers. If your data contains floating-point numbers (such as time, coordinates, lengths, etc.), fmod() is a more robust choice. For example:
$angle = 370.5;
$normalized = fmod($angle, 360); // The result is 10.5
This is especially useful for handling rotation angles or periodic animation frames.
When dealing with periodic problems in loop structures, fmod() provides an elegant and precise method to avoid manual boundary checks and frequency logic. It simplifies the code structure, improving readability and maintainability. If your project involves periodic calculations, consider using fmod() to enhance efficiency and stability.