我从API返回了一些数据,格式如下:
string(15) "hello@yahoo.com"
bool(true)
string(7) "generic"
array(5) {
["server"]=>
string(19) "imap.mail.yahoo.com"
["username"]=>
string(15) "hello@yahoo.com"
["port"]=>
int(993)
["use_ssl"]=>
bool(true)
["oauth"]=>
bool(false)
}
array(0) {
}
当我尝试使用foreach
循环解析它时,它不成功。我假设这是因为位于实际数组上方的string(15)
,bool(true)
和string(7)
数据。
这是我的foreach
循环:
$results = array();
foreach ($Request->getResults() as $imapSettings) {
$results['server'] = $imapSettings['server'];
$results['username'] = $imapSettings['username'];
$results['port'] = $imapSettings['port'];
$results['use_ssl'] = $imapSettings['use_ssl'];
$results['oauth'] = $imapSettings['oauth'];
}
当我运行上面的代码时,我收到以下错误:Warning: Illegal string offset 'server' in
。我相信这个错误通常表明某些东西不是数组。
所以我的问题是如何解析这段数据?
更新:
以下是var_dump($Request->getResults());
返回:
array(5) {
["email"]=>
string(15) "hello@yahoo.com"
["found"]=>
bool(true)
["type"]=>
string(7) "generic"
["imap"]=>
array(5) {
["server"]=>
string(19) "imap.mail.yahoo.com"
["username"]=>
string(15) "hello@yahoo.com"
["port"]=>
int(993)
["use_ssl"]=>
bool(true)
["oauth"]=>
bool(false)
}
["documentation"]=>
array(0) {
}
}
答案 0 :(得分:1)
我认为这就是你要做的事情:
$response = $Request->getResults();
$results['server'] = $response['imap']['server'];
$results['username'] = $response['imap']['username'];
$results['port'] = $response['imap']['port'];
$results['use_ssl'] = $response['imap']['use_ssl'];
$results['oauth'] = $response['imap']['oauth'];
您不需要遍历结果 - 您只需从结果中包含的'imap'数组中提取所需的信息。
此外,您可以更简洁地执行此操作,这将产生相同的结果:
$results = $response['imap'];
答案 1 :(得分:0)
foreach仅适用于数组,因此您应该转义其他类型:
$results = array();
foreach ($Request->getResults() as $imapSettings) {
if (!is_array($imapSettings)) {
// you can do other stuff for other type
continue;
}
$results['server'] = $imapSettings['server'];
$results['username'] = $imapSettings['username'];
$results['port'] = $imapSettings['port'];
$results['use_ssl'] = $imapSettings['use_ssl'];
$results['oauth'] = $imapSettings['oauth'];
}