通过MYSQL结果集递增而不停止

I am trying to increment through a result set from my table.

I attempt to display the next three results using an increment. This is working fine. For example;

current = 5.

It then displays the next three: 6,7,8

It can also display the previous three: 4,3,2

The problem comes when I reach the last couple or minimum couple of results. It will currently stop;

current = 23

next: 24, 25

I cannot figure out to loop through to the last or first few results.

E.g. I want it to do this:

current = 2

display previous three: 1, 25, 24

AND FOR next:

current = 23:

display next three: 24, 25, 1

I'm returning these as arrays. Code:

$test_array = array();

$no = 1;

while($results=mysql_fetch_assoc($test_query))
                    {
                        $test_array[] = array('test_id' => $results['id'], 
                                              'path' => $results['Path'], 
                                              'type' => $results['FileType']
                                              'no' => $no);
                        $no++;
                    }

$current_no = 0;

if(is_array($test_array) && count($test_array)>0)
                    {
                        foreach($test_array as $key=>$array)
                        {

                            if($array['test_id']==intval($db_res['current_id']))
                            {
                                $current[] = $array;
                                $current_no = intval($key+1);
                            }
                            else
                                //error

                            if(intval($current_no)>0)
                            {
                                //Next 3
                                for($i=0;$i<3;$i++)
                                {
                                    if(isset($test_array[intval($current_no+$i)]) && is_array($test_array[intval($current_no+$i)]))
                                    {
                                        $next[] = $test_array[intval($current_no+$i)];
                                    }
                                    else
                                        break;
                                }

                                //Previous 3
                                for($i=2;$i<5;$i++)
                                {
                                    if(isset($test_array[intval($current_no-$i)]) && is_array($test_array[intval($current_no-$i)]))
                                    {
                                        $previous[] = $test_array[intval($current_no-$i)];
                                    }
                                    else
                                        break;
                                }
                                break;
                            }
                            else
                                //error
                        }
                    }
                    else
                        //error

If anyone has any ideas on how to help, that would be great!

  1. Find $key for $current and set $next_key = $prev_key = $key;
  2. Find last key $max = count($test_array) - 1;
  3. Increase $next_key & decrease $prev_key 3 times (and check if boundary is reached):

Loop might look like this.

for ($i = 1; $i <= 3; $i++)
{
    $next_key = ($next_key == $max) ? 0 : $next_key + 1;
    $prev_key = ($prev_key == 0) ? $max : $prev_key - 1;

    $next[] = $test_array[$next_key];
    $prev[] = $test_array[$prev_key];
}