An old problem that came to my head a couple of days ago. I solved it as an exercise in Fortran class about 25 years ago, my current solution is:
$lbound = 1;
$ubound = 4;
$loops = 3;
$numbers = array();
for($i=1; $i<=$loops; $i++) {
$numbers[$i] = $lbound;
}
$nm = pow($ubound-$lbound+1,$loops);
printf("nm=%s\n", $nm);
$cnt = 0;
while(true) {
printf("%s. %s\n",++$cnt, implode(',',$numbers));
for($l=$loops; $l>=1; $l--) {
$numbers[$l]++;
if( $numbers[$l]>$ubound ) {
$numbers[$l] = $lbound;
}
else {
break;
}
}
if( $cnt==$nm) {
break;
}
}