【问题标题】:stdClass object and foreach loops - campaign monitor apistdClass 对象和 foreach 循环 - 活动监视器 api
【发布时间】:2025-12-08 23:55:02
【问题描述】:

我目前正在使用活动监视器 API。

这是我的代码:

require_once '../../csrest_general.php';

$auth = array('api_key' => 'xxxxxxxxxxxxxxxxxxxxxxxxx');
$wrap = new CS_REST_General($auth);

$result = $wrap->get_clients();

echo "Result of /api/v3/clients\n<br />";
if($result->was_successful()) {
    echo "Got clients\n<br /><pre>";
    var_dump($result->response);
} else {
    echo 'Failed with code '.$result->http_status_code."\n<br /><pre>";
    var_dump($result->response);
}
echo '</pre>';

这会输出以下内容:

array(2) {
  [0]=>
  object(stdClass)#5 (2) {
    ["ClientID"]=>
    string(32) "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ["Name"]=>
    string(12) "xxxxxxxxxxxx"
  }
  [1]=>
  object(stdClass)#6 (2) {
    ["ClientID"]=>
    string(32) "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ["Name"]=>
    string(15) "xxxxxxxxxxxx"
  }

}

如何将它放入 foreach 循环中?当我尝试以下操作时:

foreach ($result as $result->response) {
     echo $result;
}

我得到这个错误:

可捕获的致命错误:CS_REST_Wrapper_Result 类的对象无法转换为字符串

【问题讨论】:

  • foreach($result-&gt;response as $entry) { echo $entry-&gt;ClientID; }
  • 谢谢马克!您应该将此作为答案发布

标签: php api foreach campaign-monitor


【解决方案1】:

感谢 Mark Butler 回答了这个问题,所以我添加了他的解决方案:

foreach($result->response as $entry) { echo $entry->ClientID; }

一般来说,获取 Campaign Monitor 结果的内容需要您访问从该方法返回的对象的 response->Results 部分。不幸的是,这在 API 或文档中并不清楚,它们往往只是“print_var”从方法调用返回的对象。

例如,在列表中列出订阅者:

require_once '/csrest_lists.php';
$sList = new CS_REST_Lists(YOUR_CM_LIST_ID,YOUR_CM_ACCT_KEY);
$sSubscribers = $sList->get_active_subscribers()->response->Results; // return results
foreach($sSubscribers as $s) {
    echo $s->EmailAddress . "\t" . $s->Name . "\t" . $s->State . "\n";
}

希望这对人们有用 - 感谢 danyo 的问题 - 目前在 SO 上这些内容很少。 皮特

【讨论】:

  • 如果您更喜欢使用数组,也可以将 stdObject 转换为数组 -- $result = (array) $result->response;
最近更新 更多