Как бы я перебрать эти данные API - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть API, у которого я запрашиваю данные.

Дело в том, что я не хочу подчеркивать свое приложение, поскольку набор данных может содержать десятки тысяч объектов.

Способ, которым данные возвращаются, выглядит следующим образом: я могу указать предел страницы и смещение, например, limit = 10 и offset = 10:

"objects": {
    "object",
    "object2",
    //and so on....
}
"hasMore": true,
"count": 23123,

Свойство count содержит общее количество объектов, а hasMore равно true, если есть больше объектов для извлечения, и false, если не осталось объектов.

Если hasMore равно true, я предполагаю, что мне нужно сделать новый запрос со смещением, равным удвоенному размеру страницы, пока hasMore не будет равно false, верно?

Я пробовал что-то подобное, но без работы, так как у меня остался почти пустой объект с только hasMore, равным false и общим количеством:

 $pageSize = 10;
 $pages = ceil(23123 / $pageSize); // total count of objects
 for ($page = 0; $page <= $pages; $page++) {
    $products = $api->get_products($page * $pageSize, $pageSize);
    var_dump(json_decode($products));
 }

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Concur with @ miken32

Предполагая, что $api->getproducts( $offset, $limit ), попробуйте это:

$pageSize      = 10;
$currentPage   = 0;
$hasmore       = true;

while( $hasmore === true ) {
    $currentOffset = $currentPage * $pageSize;
    $products      = json_decode( $api->get_products( $currentOffset, $pageSize ), true );
    $hasmore       = $products['hasMore'];
    processProducts( $products['objects'] );
    $currentPage++;
}
0 голосов
/ 12 сентября 2018

Должно работать

$products = json_decode($products, true)

foreach ($products["objects"] as $object) {
    echo $object;
}
...