Number sequence or cycle

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
jattin480
Forum Newbie
Posts: 2
Joined: Mon Aug 25, 2008 1:02 pm

Number sequence or cycle

Post by jattin480 »

Hello,
This is probably simple but it is driving me crazy.
I need to increment a variable but when it goes over a limit it continues the count by starting from the beginning. like this:

Let's say that the end of the sequence is 10 and I want to go through it 16 times starting from 1

1---2---3---4---5---6---7---8---9---10
1---2---3---4---5---6---7---8---9---10
11-12--13--14--15--16


As you see it ends at 6 and it would return that value.
soulcrazy
Forum Newbie
Posts: 13
Joined: Sun Aug 24, 2008 10:05 pm
Location: Ontario, Canada

Re: Number sequence or cycle

Post by soulcrazy »

This what you're looking for?

Code: Select all

 
 
$limit = 16;
for ( $i=0; $i<$limit; $i++ ) {
    for ( $x=0; $x<10; $x++ )
        echo $i.':'.$x.' -- ';
    echo '<br />';
}
 
/*  output:
    0:0 -- 0:1 -- 0:2 -- 0:3 -- 0:4 -- 0:5 -- 0:6 -- 0:7 -- 0:8 -- 0:9 --
    1:0 -- 1:1 -- 1:2 -- 1:3 -- 1:4 -- 1:5 -- 1:6 -- 1:7 -- 1:8 -- 1:9 --
    2:0 -- 2:1 -- 2:2 -- 2:3 -- 2:4 -- 2:5 -- 2:6 -- 2:7 -- 2:8 -- 2:9 --
    3:0 -- 3:1 -- 3:2 -- 3:3 -- 3:4 -- 3:5 -- 3:6 -- 3:7 -- 3:8 -- 3:9 --
    4:0 -- 4:1 -- 4:2 -- 4:3 -- 4:4 -- 4:5 -- 4:6 -- 4:7 -- 4:8 -- 4:9 --
    5:0 -- 5:1 -- 5:2 -- 5:3 -- 5:4 -- 5:5 -- 5:6 -- 5:7 -- 5:8 -- 5:9 --
    6:0 -- 6:1 -- 6:2 -- 6:3 -- 6:4 -- 6:5 -- 6:6 -- 6:7 -- 6:8 -- 6:9 --
    7:0 -- 7:1 -- 7:2 -- 7:3 -- 7:4 -- 7:5 -- 7:6 -- 7:7 -- 7:8 -- 7:9 --
    8:0 -- 8:1 -- 8:2 -- 8:3 -- 8:4 -- 8:5 -- 8:6 -- 8:7 -- 8:8 -- 8:9 --
    9:0 -- 9:1 -- 9:2 -- 9:3 -- 9:4 -- 9:5 -- 9:6 -- 9:7 -- 9:8 -- 9:9 --
    10:0 -- 10:1 -- 10:2 -- 10:3 -- 10:4 -- 10:5 -- 10:6 -- 10:7 -- 10:8 -- 10:9 --
    11:0 -- 11:1 -- 11:2 -- 11:3 -- 11:4 -- 11:5 -- 11:6 -- 11:7 -- 11:8 -- 11:9 --
    12:0 -- 12:1 -- 12:2 -- 12:3 -- 12:4 -- 12:5 -- 12:6 -- 12:7 -- 12:8 -- 12:9 --
    13:0 -- 13:1 -- 13:2 -- 13:3 -- 13:4 -- 13:5 -- 13:6 -- 13:7 -- 13:8 -- 13:9 --
    14:0 -- 14:1 -- 14:2 -- 14:3 -- 14:4 -- 14:5 -- 14:6 -- 14:7 -- 14:8 -- 14:9 --
    15:0 -- 15:1 -- 15:2 -- 15:3 -- 15:4 -- 15:5 -- 15:6 -- 15:7 -- 15:8 -- 15:9 -- 
    */
 
 
If you want it to start at 1, instead of 0, and have it end at 10, not 9...change the 2nd FOR-LOOP to:

Code: Select all

 
for ( $x=1; $x<11; $x++ ) { ... }
 
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Re: Number sequence or cycle

Post by RobertGonzalez »

Adds a little bit of flexibility to it.

Code: Select all

<?php
header('Content-Type: text/plain');
$startnumber = 1;
$outerlimit = 16; 
$innerlimit = 10;
for ($i = $startnumber; $i <= $outerlimit; $i++) {
    for ($x = $startnumber; $x <= $innerlimit; $x++ ) { 
        echo "$i:$x\t";
    }
    echo "\n";
}
?>
jattin480
Forum Newbie
Posts: 2
Joined: Mon Aug 25, 2008 1:02 pm

Re: Number sequence or cycle

Post by jattin480 »

Thank you for the reply, my example was just a visual of the process so i guess i'll post it differently:

I start with a variable and show what I would like the end result to be. I'm pretty sure I can accomplish yjis with a function just don't know how.

To put it in another way I want to set a limit like when you work with seconds.
Seconds end at 59 then it start from 00.

so if $seconds = 50 ($seconds + 10) = 00:01:00 I would want to return just the values in the seconds field.

By a limit of 33: Snumber = 29; ($number + 5) should be = 1

In other words if we have a wheel of numbers 1 to 33 and I ask you to move the wheel 35 positions starting from #1, you would end up a #2
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Re: Number sequence or cycle

Post by RobertGonzalez »

Code: Select all

<?php
function getNextInLine($value, $limit) {
  if ($limit >= $value) {
    return $value;
  }
 
  $new =  $value - $limit;
 
  return $new >= $limit ? getNextInLine($new, $limit) : $new;
}
 
//tests
$max = 59;
$me = 122;
echo getNextInLine($me, $max); // Output: 4
?>
Post Reply