微信扫一扫打赏支持

php中对象转数组有哪些方法(总结测试)

php中对象转数组有哪些方法(总结测试)

一、总结

一句话总结:json_decode(json_encode($array),true)和array强制转换(或带递归)

 

1、array方式强制转换对象为数组的方式中,属性的权限不同会有影响么?

结果是对的,但是对象的属性如果是protected的话,转换成数组的键的时候属性名前会加上*字符

array(9) {
  ["*questions"] => array(21) {
    [0] => array(13) {
      ["bq_id"] => int(28)
      ["bq_b_id"] => int(5)

这个*是因为我的属性是protected的,如果属性换成public,就没有了

 

2、用(array)方式递归转化解决的问题是什么?

实质是解决对象里还有对象的问题,编码的话是非常简单的递归

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

 

 

3、json_encode如果不能将对象转化为json,我们可以怎样实现目标?

先把对象转换成数组,然后数组就可以json_encode转成json了

 

4、目的是获取对象中的属性,对象中的影响json_encode的题目数据(包含超级大段中文)其实是不需要的,带上反而导致无法使用json_encode函数给了我们什么启示?

关注所需,剔除掉干扰元素

 

 

 

 

二、php中对象转数组有哪些方法

1、用(array)方式递归转化(实质是解决对象里还有对象的问题)

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

结果是对的,但是对象的属性如果是protected的话,转换成数组的键的时候属性名前会加上*字符

array(9) {
  ["*questions"] => array(21) {
    [0] => array(13) {
      ["bq_id"] => int(28)
      ["bq_b_id"] => int(5)

这个*是因为我的属性是protected的,如果属性换成public,就没有了

 

2、转$xmlString的

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

 

 

3、json_decode(json_encode($array),true)方式

这个你对象首先能被json_encode才行

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

 

 

4、$arr = (array)$obj方式转化的效果

如果对象里面没有对象,这个方法是对的
对象里面还有对象,就得用第一种递归的方式将所有的对象都转换成数组
 

 

参考:PHP中把对象转数组的几个方法 - ThinkPHP框架
http://www.thinkphp.cn/code/2903.html

 

 
posted @ 2018-09-12 02:24  范仁义  阅读(9743)  评论(1编辑  收藏  举报