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

时间:2014-08-20 17:49:25

标签: php mysql

我正试图从我的表中增加一个结果集。

我尝试使用增量显示接下来的三个结果。这工作正常。 例如;

  

当前= 5。

     

然后显示接下来的三个:6,7,8

     

它还可以显示前三个:4,3,2

问题出现在我达到最后几个或最少几个结果时。它目前会停止;

  

current = 23

     

下一篇:24,25

我无法想出循环到最后或前几个结果。

E.g。我希望它能做到这一点:

  

current = 2

     

显示前三个:1,25,24

AND FOR next:

  

current = 23:

     

显示下三个:24,25,1

我将这些作为数组返回。代码:

$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

如果有人对如何提供帮助有任何想法,那就太棒了!

1 个答案:

答案 0 :(得分:0)

  1. 找到$ current的$ key并设置$next_key = $prev_key = $key;
  2. 查找最后一个键$max = count($test_array) - 1;
  3. 增加$ next_key&amp;减少$ prev_key 3次(并检查是否 到达边界):
  4. 循环可能看起来像这样。

    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];
    }