Я пытаюсь увеличить набор результатов из моей таблицы.

Я пытаюсь отобразить следующие три результата, используя приращение. Это нормально работает. Например;

ток = 5.

Затем он отображает следующие три: 6,7,8

Он также может отображать предыдущие три: 4,3,2

Проблема возникает, когда я достигаю последней пары или минимальной пары результатов. В настоящее время он остановится;

ток = 23

следующий: 24, 25

Я не могу понять, как пройти до последних или первых нескольких результатов.

Например. Я хочу, чтобы это было так:

ток = 2

отобразить предыдущие три: 1, 25, 24

И ДЛЯ следующего:

ток = 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

Если у кого-то есть идеи, как помочь, было бы здорово!

0
Veltu 20 Авг 2014 в 21:49
1
Не могли бы вы показать код, который у вас уже есть? Нам гораздо проще изменить ваш существующий код, чем угадать, что у вас есть, и переписать его во что-то другое.
 – 
Jonathan Kuhn
20 Авг 2014 в 21:55
Итак, вы просто хотите создать бесконечный цикл навигации по результатам? В вашем третьем примере, где current = 2, вы действительно хотите, чтобы предыдущие три были 24, 25, 1?
 – 
Mike Brant
20 Авг 2014 в 21:57
Я думаю, что если бы это было для навигации / разбивки на страницы, это просто сбивало бы с толку. Кроме того, что произойдет, если в ваших результатах будут возвращены только 2 страницы, вы бы хотели, чтобы они действительно отображали previous: 1, 2, 1 current: 2 Next: 1, 2, 1, потому что именно так это будет зацикливаться.
 – 
Jonathan Kuhn
20 Авг 2014 в 22:00
Я добавил код.
 – 
Veltu
20 Авг 2014 в 22:13

1 ответ

Лучший ответ
  1. Найдите $ key для $ current и установите $next_key = $prev_key = $key;
  2. Найти последний ключ $max = count($test_array) - 1;
  3. Увеличьте $ next_key и уменьшите $ prev_key в 3 раза (и проверьте, достигнута ли граница):

Петля может выглядеть так.

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];
}
0
shudder 20 Авг 2014 в 23:49
Отличный ответ, есть ли способ избежать дублирования, если меньше 7 цифр?
 – 
Veltu
21 Авг 2014 в 13:50
Я думаю, что я бы ограничил цикл одним проходом только тогда (дублирование менее чем с 3 элементами, но терпимо).
 – 
shudder
21 Авг 2014 в 19:37