PHP检查多维数组和对象组合中是否存在密钥,然后获取值

时间:2017-03-12 13:46:25

标签: php arrays object multidimensional-array stdclass

我正在查询API,我得到的响应是一个多维对象(stdClass),它也包含数组。我需要能够检查响应是错误还是成功。如果响应成功,我需要返回TRUE。如果响应是错误,我需要返回响应中包含的错误消息。成功和错误的响应格式完全不同。错误的响应如下所示:

object(stdClass)#837 (3) {
  ["errors"]=> array(1) {
                [0]=> object(stdClass)#838 (2) {
                        ["code"]=>int(324)
                        ["message"]=>string(80) "Duration too long, maximum:30000, actual:37081 (MediaId: snf:840912013693931526)"
                    }
                }
  ["httpstatus"]=>int(400)
  ["rate"]=>NULL
}

成功的回应如下:

  object(stdClass)#837 (27) {
  ["created_at"]=> string(30) "Sun Mar 12 13:41:43 +0000 2017"
  ["id"]=> int(840920745073102850)
  ["id_str"]=> string(18) "940920795073102850"
  ["text"]=> string(32) "The Details Posted Here"
  ["truncated"]=> bool(false)
  ["entities"]=> object(stdClass)#838 (5) {
                ["hashtags"]=>
    ........ Way More is in the Response but it does not matter...

我已尝试将响应更改为数组,然后使用isset确定是否为错误,如果是,则获取错误详细信息的值,如下所示:

$RESPONSEARRAY = (array) $RESPONSE; 
(isset($RESPONSEARRAY["errors"])) {
$ERRORMSG_CODE= $RESPONSEARRAY['errors'][0]['code'];
$ERRORMSG_MESSAGE = $RESPONSEARRAY['errors'][0]['message'];
$ITWASANERROR = $ERRORMSG_CODE.": ".$ERRORMSG_MESSAGE;
return $ITWASANERROR;
} else {
return true;
}

但是执行上述操作会给我以下错误:

Fatal error:  Cannot use object of type stdClass as array

任何人都可以建议一种方法来做我正在尝试做的事情,在服务器上的开销最小。也许无需将stdClass对象转换为数组,或者如果必须这样做,那就没关系,但我只是需要它才能工作。任何人可以提供的帮助都将受到超级赞赏。

2 个答案:

答案 0 :(得分:1)

以下是访问数组内对象的正确方法。

$RESPONSEARRAY = (array) $RESPONSE; 
if(isset($RESPONSEARRAY["errors"])) {
   $ERRORMSG_CODE= $RESPONSEARRAY['errors'][0]->code;
   $ERRORMSG_MESSAGE = $RESPONSEARRAY['errors'][0]->message;
   $ITWASANERROR = $ERRORMSG_CODE.": ".$ERRORMSG_MESSAGE;
   return $ITWASANERROR;
} else {
   return true;
}

答案 1 :(得分:1)

lib.subMenu = HMENU lib.subMenu { 1 = TMENU 1 { wrap = <ul id="submenu">|</ul> NO = 1 NO { wrapItemAndSub = <li>|</li> } ACT = 1 ACT { wrapItemAndSub = <li class="active">|</li> } } // -1 = current page entryLevel = -1 // Set entry level to -2 (this is the parent page), if the current page has // no subpages. entryLevel.override = -2 entryLevel.override.if { negate = 1 isTrue.numRows { table = pages where = pid=this } } } 你可以得到结果:

$RESPONSEARRAY = (array) $RESPONSE;

因此 ["errors"]=> array(1) { [0]=> object(stdClass)#1 (2) { ["code"]=> int(324) ["message"]=> string(80) "Duration too long, maximum:30000, actual:37081 (MediaId: snf:8 40912013693931526)" } } ["httpstatus"]=> int(400) 应为$ERRORMSG_CODE= $RESPONSEARRAY['errors'][0]['code'];。 等等