Разбивка на страницы со смещением PHP API

#php #arrays #json #pagination

#php #массивы #json #разбивка на страницы

Вопрос:

У меня есть следующий код, но я не уверен, как зацикливать и смещать записи, чтобы получить следующие 20 записей, используя тот же цикл функций.

gameid равен нулю при первом вызове, а при втором вызове gameid равен 21.

 $result = new ArrayObject();

  
$count = 0;
foreach($response as amp;$game) {
    
    $game  = get_object_vars($game);
         
    if ($game['gameType'] == $gametype )
    {   
        $result->append(array($game['gameName'], $game['gameType']));
        if ($count == $gameid 19) break;
        $count    ;
        
    }       
    
}
  

Спасибо

Комментарии:

1. Это будет зависеть от того, что вы планируете делать $response после завершения цикла. Вы заполняете a $result , что для меня говорит о том, что $response в идеале ваш должен быть оставлен в такте, но вы преобразуете каждый его элемент. Почему? Если вам просто нужно разбить на страницы, то вы могли бы использовать что-то вроде foreach(array_slice($response, $offset, $limit) as $game) { .

2. Спасибо @RoAchterberg, но я не могу это использовать, потому что я хочу фильтровать по типу игры $game [‘gameType’] == $gametype

3. Тогда почему бы просто не выполнить фильтрацию $response сначала по этому условию, чтобы разбивать на страницы только массив элементов вашего конкретного игрового типа?

Ответ №1:

Я думаю, вам следует использовать концепцию размера страницы и индекса страницы.

В вашем случае кажется, что вам нужен размер страницы 20. Отправка второго запроса gameid означает, что вам нужен размер страницы 20 и индекс страницы 1 (вместо 0).

Итак, рассмотрим такой код:

 $count = 0;
$pageSize = 20; // this can be const or come as param
$pageIndex = 0; // this should be as params
foreach($response as amp;$game) {

    $game  = get_object_vars($game);
     
    if ($game['gameType'] == $gametype ) {
        $count   ;
        if ($count > ($pageSize * $pageIndex))
            $result->append(array($game['gameName'], $game['gameType']));
        // if you over the request chunk break
        if ($count > ($pageSize * ($pageIndex   1)) break; 
        
    
    }       

}