Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP检查多维数组和对象组合中是否存在键,然后获取值_Php_Arrays_Object_Multidimensional Array_Stdclass - Fatal编程技术网

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

PHP检查多维数组和对象组合中是否存在键,然后获取值,php,arrays,object,multidimensional-array,stdclass,Php,Arrays,Object,Multidimensional Array,Stdclass,我正在查询一个API,得到的响应是一个多维对象(stdClass),它也包含数组。我需要能够检查响应是错误条件还是成功。如果响应成功,我需要返回TRUE。如果响应是错误的,我需要返回响应中包含的错误消息。成功和错误的响应格式完全不同。对错误的响应如下所示: object(stdClass)#837 (3) { ["errors"]=> array(1) { [0]=> object(stdClass)#838 (2) {

我正在查询一个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...
对成功的响应如下所示:

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对象转换为数组,或者如果必须这样做,那么这很好,但我只需要它工作。如果有人能提供任何帮助,我们将不胜感激。

下面是访问阵列中对象的正确方法

$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;
}

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

$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;
}
$RESPONSEARRAY=(数组)$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']应该是
$ERRORMSG\u code=$RESPONSEARRAY['errors'][0]->code
。 依此类推

$RESPONSEARRAY=(数组)$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']应该是
$ERRORMSG\u code=$RESPONSEARRAY['errors'][0]->code

依此类推

if(isset($object->errors)){echo$object->errors[0]->message;}
WoW。。。尽管很容易,但它仍然有效。。非常感谢@riggsfully
if(isset($object->errors)){echo$object->errors[0]->message;}
WoW。。。尽管很容易,但它仍然有效。。非常感谢@RiggsFolly