我无法弄清楚为什么我的循环根本不起作用。我已成功连接到我的客户端目录,我可以获取一些用户。我跟着PHP instructions。但是本教程不包括仅为所有用户提取100个用户的默认页面大小的示例。
我知道skipToken(explained here),但由于某种原因,我无法使用我的循环。
基本上我首先定义一个数组和两个子数组。
$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'};
答案 0 :(得分:1)
好的,我明白了。
首先,我必须在实际令牌之前删除所有内容。
$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循环,因为lastpage不包含'odata.nextLink'
。
if(isset($new->{'odata.nextLink'})){
$skipToken = empty($new->{'odata.nextLink'});
} else{
break;
}
我将每个100个用户数组附加到另一个我可以在PHP外部轻松使用的数组。