Я не могу понять, почему мой цикл не работает вообще. Я успешно подключился к своему клиентскому каталогу и могу выбрать некоторых пользователей. Я следовал за Инструкции PHP. Но этот учебник не включает в себя пример для извлечения всех пользователей только по умолчанию размер страницы 100 пользователей.
Я в курсе про skipToken (объяснил здесь) но по какой-то причине я не смог заставить его работать с моей петлей.
Сначала я определяю массив и два вложенных массива.
$myArray = array();
$myArray['skipToken'] = "";
$myArray['users'] = "";
Затем я выполню первую выборку, чтобы получить skipToken и группу пользователей, которые придут.
require_once("GraphServiceAccessHelper.php");
$users = GraphServiceAccessHelper::getFeed('users');
Вставка значений в уже существующие массивы.
$myArray['skipToken'] = $users->{'odata.nextLink'};
$myArray['users'][] = $users->{'value'};
Теперь они заполнены информацией. Теперь пришло время зацикливаться!
for($i = 0; $i < 2; $i++){
if($myArray['skipToken'] != ""){
$skipToken = $myArray['skipToken'];
require_once("GraphServiceAccessHelper.php");
$users = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
$myArray['skipToken'] = $users->{'odata.nextLink'};
$myArray['users'][] = $users->{'value'};
}
}
Консоль запускается из-за ошибки, которая указывает на определяющую часть цикла skipToken:
Notice: Undefined property: stdClass::$odata.nextLink
$myArray['skipToken'] = $users->{'odata.nextLink'};
Хорошо, я понял это.
Сначала я должен был удалить все до фактического токена.
$skipToken = $users->{'odata.nextLink'};
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);
Затем внутри цикла использовать, чтобы получить новый skipToken и сделайте то же самое, что и выше:
$new = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
if(isset($new->{'odata.nextLink'})){
$skipToken = empty($new->{'odata.nextLink'});
} else{
break;
}
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);
$myArray['tokens'] = $skipToken;
$myArray['users'][] = $new->{'value'};
Проверяя, если 'odata.nextLink"
существует, я могу легко остановить цикл while, так как последняя страница не содержит 'odata.nextLink'
,
if(isset($new->{'odata.nextLink'})){
$skipToken = empty($new->{'odata.nextLink'});
} else{
break;
}
Я добавляю каждый массив из 100 пользователей в другой массив, который я могу легко вызвать, используя его вне PHP.
Других решений пока нет …