PHP中把stdClass Object转array的几个方法

本文介绍在PHP中如何将StdClass类型的对象转换为数组。提供了三种转换方法,并对比了它们之间的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PHP和JS通讯通常都用json,但用 json 传过来的数组并不是标准的array,而是 stdClass 类型。那么我们可以参考下面的几个方法进行转换。


方法一:

//PHP stdClass Object转array  
function object_array($array) {  
    if(is_object($array)) {  
        $array = (array)$array;  
     } if(is_array($array)) {  
         foreach($array as $key=>$value) {  
             $array[$key] = object_array($value);  
             }  
     }  
     return $array;  
}

方法二:

$array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE);

方法三:

function object2array_pre(&$object) {
        if (is_object($object)) {
            $arr = (array)($object);
        } else {
            $arr = &$object;
        }
        if (is_array($arr)) {
            foreach($arr as $varName => $varValue){
                $arr[$varName] = $this->object2array($varValue);
            }
        }
        return $arr;
    }


如果是10W的数据量的话,执行要进1s,结构再复杂些,可以达到3s, 性能太差了
可以用以下替换:
function object2array(&$object) {
             $object =  json_decode( json_encode( $object),true);
             return  $object;
    }

但是对json的特性,只能是针对utf8的,否则得先转码下。





<think>好的,用户的问题是关于如何将PHP对象换为数组。我需要先回忆一下PHP中处理对象和数组换的相关方法。首先,PHP中有类型换,可以通过将对象强制换为数组来实现。例如使用(array)$object。不过这种方法可能无法处理嵌套对象,需要进一步检查。然后,想到json_encode和json_decode的组合。先将对象为JSON字符串,再解码为数组。这种方法可能更全面,特别是处理嵌套结构时。另外,可能需要手动遍历对象的属性,逐个赋值到数组中。这适用于简单对象,但比较繁琐。还要注意是否有现成的函数,比如get_object_vars,可以获取对象的公有属性。结合这个函数,或许可以递归处理嵌套对象。用户提供的引用中有提到数组换的问题,比如引用1提到数组中的元素是数组,导致换错误。这可能提示用户在处理多层结构时需要注意递归换。引用3提到使用http_build_query处理数组参数,虽然不直接相关,但说明用户可能是在处理HTTP请求时的数据换,可能需要深层换。需要验证这些方法是否适用于所有情况,比如私有属性、受保护属性等。类型换可能不会包含私有属性,而get_object_vars可能只返回公有属性。因此,用户可能需要根据具体情况选择方法。最后,生成相关问题时要围绕对象数组的其他方法、处理嵌套对象、性能考虑等,帮助用户全面了解。</think>在PHP中将对象换为数组有多种方法,以下是三种常用方式及适用场景: ### 方法一:类型强制换 ```php $object = new stdClass(); $object->name = 'John'; $array = (array)$object; // 输出:Array ( [name] => John ) ``` *适用场景*:简单对象换,无法处理嵌套对象[^1] ### 方法二:JSON编码解码 ```php $array = json_decode(json_encode($object), true); ``` *适用场景*:需要深度换嵌套对象和关联数组[^3] ### 方法三:递归属性遍历 ```php function objectToArray($obj) { if (is_object($obj)) { $obj = get_object_vars($obj); } return is_array($obj) ? array_map(__FUNCTION__, $obj) : $obj; } ``` *适用场景*:需要控制换过程的复杂对象[^2] ### 性能对比 $$ T(n) = O(n) \text{(线性时间复杂度)} $$ 其中n表示对象属性的数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值