1 PHP автоматически перебирает нумерацию страниц

вопрос создан в Thu, Mar 28, 2019 12:00 AM

У меня есть следующий PHP-код и функция, с которой я вызываю URL-адрес API и возвращаю данные в виде массива, используя json_decode. Проблема в том, что возвращаемые данные разбиты на страницы. Поэтому с результатом страницы я получаю ключ массива с именем nextPageID. Поэтому, когда я выполняю вызов с использованием функции, я могу получить только первый набор данных с первой страницы. Есть ли у меня способ зациклить функцию, пока параметр nextPageID больше не будет определен?

$getData = getData("https://api.url/api?key=xyz");
$next_pageid = $getData['nextPageID'];

echo "<pre>";
print_r($getData);
echo "</pre>";


function getData($url){
    $json = file_get_contents($url);
    return json_decode($json,true);
}
    
0
  1. Вы смотрели документацию по API?
    2019-03-28 11: 36: 26Z
  2. А как насчет проверки этого параметра и запуска другого вызова API?
    2019-03-28 11: 38: 07Z
  3. "Есть ли способ" - Да. Что вы пробовали и где вы застряли? Я полагаю, что на высоком уровне ваши шаги будут заключаться в десериализации ответа в объект и его изучении. Если это указывает на то, что доступно больше результатов, сделайте еще один запрос и десериализуйте его и объедините его данные с имеющимися у вас данными.
    2019-03-28 11: 38: 13Z
  4. Просто окружите свой код (не функцию) циклом while: do { ....<your code> ....} while (isset($getData['nextPageID'])); и, конечно, используйте следующий индекс.
    2019-03-28 11: 40: 44Z
1 ответ                              1                         

Вам нужно использовать рекурсию - вызывать функцию в функции. На примере:

$api_url = "https://api.url/api?key=xyz";
function getData($api){
    $json = file_get_contents($api);
    $array = json_decode($json);
    //This is ok ONLY if on last page nextPageID = null and for get next page you need to use parametr nextPageID in GET
    if(isset($array['nextPageID']) && $array['nextPageID'] !== null){
        $array .= array_merge($array,(getData($api."&nextPageID=".$array['nextPageID']));
    }
    return $array;
}
print_r (getData($api_url));
    
0
2019-03-28 23: 11: 32Z
источник размещен Вот