PHP - есть ли способ перебрать все элементы в файле JSON, если бы я мог получить только 100 элементов за один вызов? - PullRequest
0 голосов
/ 23 июня 2019

Мне нужно отобразить все элементы / объекты в файле JSON. В настоящее время я могу вызвать только конечную точку, которая принимает смещение (начальный индекс) и ограничение. Максимальное количество элементов, которое вы можете получить, составляет 100 (лимит) за один вызов. Мне было интересно, как я могу получить все элементы файла JSON и сохранить их в массиве, не зная, сколько элементов содержится в файле JSON.

Изначально я пытался сохранить первые 500 элементов в массиве. Проблема с этим заключалась в том, что выходной размер этого массива составлял 5, а не 500, потому что конечная точка getElements возвращает список из 100 элементов, поэтому в действительности массив сохранял 100 элементов при каждом индексе. Так, например, json_array [0] содержит первые 100 элементов, json_array [2] содержит следующие 100 элементов и т. Д.

$offset = 0;
$limit = 100;
$json_array = array();

while($offset < 500)
{
array_push($json_array,getElements($token,"api/Elements?offset=".$offset."&limit=".$limit));
$offset+=100;
}

echo count($json_array)

Я ожидаю найти способ перебрать весь файл json, не зная количества элементов, которые есть в файле. Мое последнее ожидание - найти способ отобразить количество всех этих элементов. Спасибо!

1 Ответ

0 голосов
/ 23 июня 2019

Я работаю с аналогичным API - есть опция per_page и опция page.

К счастью, API, к которому я обращаюсь, настроен на возврат всего без ошибок, если естьменьше результатов, чем значение per_page, поэтому я просто зацикливаюсь, когда выбираю 100 записей.

Что-то вроде:

$fetched=100;
$page=0;
$per_page=100;
$total_result=array();
while($fetched==100){

  $res=json_decode(file_get_contents($API_URL."?offset=".($page*$per_page));

  $fetched=count($res);

  // add res to big result set
  for($i=0;$i<$fetched;$i++){
     $total_result[]=$res[$i];
  }

  $page++;   
}
...