将多维对象转换为数组

Gir*_*iri 21 php arrays multidimensional-array

我正在使用亚马逊产品广告API.值作为多维对象返回.

它看起来像这样:

object(AmazonProduct_Result)#222 (5) {
  ["_code":protected]=>
  int(200)
  ["_data":protected]=>
  string(16538) 
array(2) {
    ["IsValid"]=>
    string(4) "True"
    ["Items"]=>
    array(1) {
      [0]=>
      object(AmazonProduct_Item)#19 (1) {
        ["_values":protected]=>
        array(11) {
          ["ASIN"]=>
          string(10) "B005HNF01O"
          ["ParentASIN"]=>
          string(10) "B008RKEIZ8"
          ["DetailPageURL"]=>
          string(120) "http://www.amazon.com/Case-Logic-TBC-302-FFP-Compact/dp/B005HNF01O?SubscriptionId=AKIAJNFRQCIJLTY6LDTA&tag=*********-20"
          ["ItemLinks"]=>
          array(7) {
            [0]=>
            object(AmazonProduct_ItemLink)#18 (1) {
              ["_values":protected]=>
              array(2) {
                ["Description"]=>
                string(17) "Technical Details"
                ["URL"]=>
                string(217) "http://www.amazon.com/Case-Logic-TBC-302-FFP-Compact/dp/tech-data/B005HNF01O%3FSubscriptionId%3DAKIAJNFRQCIJLTY6LDTA%26tag%*******-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB005HNF01O"
              }
            }
            [1]=>
            object(AmazonProduct_ItemLink)#17 (1) {
              ["_values":protected]=>
              array(2) {
Run Code Online (Sandbox Code Playgroud)

我的意思是它也有对象内的数组.我想将它们全部转换为多维数组.

ken*_*hin 107

我知道这是旧的,但你可以尝试以下代码:

$ array = json_decode(json_encode($ object),true);

其中$ object是API的响应.

  • 你知道吗.我爱你. (4认同)
  • 我相信你一直都会得到这个,超级英雄,但你刚刚救了我的命. (3认同)
  • 那么,为什么这还不是答案呢? (2认同)

Sub*_*Red 20

您可以使用如下的递归函数:

function objToArray($obj, &$arr){

    if(!is_object($obj) && !is_array($obj)){
        $arr = $obj;
        return $arr;
    }

    foreach ($obj as $key => $value)
    {
        if (!empty($value))
        {
            $arr[$key] = array();
            objToArray($value, $arr[$key]);
        }
        else
        {
            $arr[$key] = $value;
        }
    }
    return $arr;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个常见请求的一种稍微简洁的方法:function objectToArray($ data){if(is_object($ data)){$ data = get_object_vars($ data); } if(is_array($ data)){return array_map(__ FUNCTION __,$ data); } else {return $ data; }} (5认同)

Quo*_*ons 5

function convertObjectToArray($data) {
    if (is_object($data)) {
        $data = get_object_vars($data);
    }

    if (is_array($data)) {
        return array_map(__FUNCTION__, $data);
    }

    return $data;
}
Run Code Online (Sandbox Code Playgroud)

感谢凯文·奥普·登·坎普。