zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    搭建jenkins jmeter持续集成
    Jenkins windows环境搭建
    Appium环境搭建(二)
    Qt webkitwidgets模块和webenginewidgets模块
    Qt程序无法输入中文的问题
    在Qt中使用SQLite数据库
    Ubuntu下搜狗拼音输入法打不出汉字的解决方法
    drupal7创始人root忘记密码的解决办法
    javascript块级作用域
    javascript闭包
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9632118.html
Copyright © 2011-2022 走看看