Il se peut qu'avant d'effectuer une boucle for, vous ne sachiez pas vraiment si les nombres à manipuler dans la variable $i sont entiers ou décimaux. Et, pour ces derniers, il se peut que vous ne sachiez pas vraiment non plus combien il y a de chiffres après la virgule.
En revanche, vous avez la possibilité de récupérer les deux nombres extrêmes qui délimiteront la boucle for.
La fonction suivante permettra de paramétrer la boucle selon le type de nombres, l'absence ou non de chiffres après la virgule et le nombre de ces derniers, le cas échéant.
<?php
function decimale($nombre){
// On vérifie la présence d'une virgule dans le nombre
$virgule=strpos($nombre, '.');
// S'il y en a, on définit le nombre 10 puissance n,
// où n représente le nombre de chiffres après la virgule
if ($virgule){
$decimale=explode('.', $nombre);
$decimale=$decimale[1];
$decimale=strlen($decimale);
$puissance=bcpow(10, $decimale);
}
// Sinon, on définit le nombre 1
else $puissance=1;
return $puissance;
}
?>
Des exemples d'application de cette fonction
<?php
$min=-10.099;
$max=-10.001;
?>
<html>
<body>
<ul>
<?php
// On multiplie les nombres extrêmes par 10 puissance n ou par 1, c'est selon
for ($i=$min*decimale($min); $i<=$max*decimale($max); $i++){
// Pour l'affichage, on divise le produit par le plus grand des deux nombres retournés par la fonction
?>
<li><?php echo $i/max(decimale($min), decimale($max)) ?></li>
<?php
// Affiche -10.099, -10.098, -10.097... -10.002, -10.001
}
?>
</ul>
</body>
</html>
<?php
$min=5.1;
$max=5.9;
?>
<html>
<body>
<ul>
<?php
// On multiplie les nombres extrêmes par 10 puissance n ou par 1, c'est selon
for ($i=$min*decimale($min); $i<=$max*decimale($max); $i++){
// Pour l'affichage, on divise le produit par le plus grand des deux nombres retournés par la fonction
?>
<li><?php echo $i/max(decimale($min), decimale($max)) ?></li>
<?php
// Affiche 5.1, 5.2, 5.3... 5.8, 5.9
}
?>
</ul>
</body>
</html>
<?php
$min=100;
$max=110;
?>
<html>
<body>
<ul>
<?php
// On multiplie les nombres extrêmes par 10 puissance n ou par 1, c'est selon
for ($i=$min*decimale($min); $i<=$max*decimale($max); $i++){
// Pour l'affichage, on divise le produit par le plus grand des deux nombres retournés par la fonction
?>
<li><?php echo $i/max(decimale($min), decimale($max)) ?></li>
<?php
// Affiche 100, 101, 102... 109, 110
}
?>
</ul>
</body>
</html>
Seule ombre au tableau, ça ne marche pas si l'on a affaire à des cas comme suit:<?php
// Nombre de chiffres après la virgule différent
$min=10.055;
$max=10.1;
// Un des nombres extrêmes ayant un ou plusieurs zéros après la virgule et à la fin
// (ce cas revient au même que celui ci-dessus)
$min=10.055;
$max=10.100;
?>