zoukankan      html  css  js  c++  java
  • PHP 对象和数组互相转换

    最简单的:$array = (array)$object;

    但是, 如果对象的属性也是个对象的话, 就转换不了了, 就是说PHP的强制类型转换不能把对象属性中的对象转换成数组的下一个维度的数组, 刚刚找了手册说hw_objrec2array这个函数可以, 但是我用了提示 undefined, 然后就自己写了个如下:

    function ob2ar($obj) {
        if(is_object($obj)) {
            $obj = (array)$obj;
            $obj = ob2ar($obj);
        } elseif(is_array($obj)) {
            foreach($obj as $key => $value) {
                $obj[$key] = ob2ar($value);
            }
        }
        return $obj;
    }

    php多层数组和对象的转换 
    多层数组和对象转化的用途很简单,便于处理WebService中多层数组和对象的转化 
    简单的(array)和(object)只能处理单层的数据,对于多层的数组和对象转换则无能为力。 
    通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_encode和decode的性能也值得疑虑。 

    <?php 
    
    function objectToArray($d) { 
    if (is_object($d)) { 
    // Gets the properties of the given object 
    // with get_object_vars function 
    $d = get_object_vars($d); 
    } 
    
    if (is_array($d)) { 
    /* 
    * Return array converted to object 
    * Using __FUNCTION__ (Magic constant) 
    * for recursive call 
    */ 
    return array_map(__FUNCTION__, $d); 
    } 
    else { 
    // Return array 
    return $d; 
    } 
    } 
    
    function arrayToObject($d) { 
    if (is_array($d)) { 
    /* 
    * Return array converted to object 
    * Using __FUNCTION__ (Magic constant) 
    * for recursive call 
    */ 
    return (object) array_map(__FUNCTION__, $d); 
    } 
    else { 
    // Return object 
    return $d; 
    } 
    } 
    
    // Useage: 
    // Create new stdClass Object 
    $init = new stdClass; 
    // Add some test data 
    $init->foo = "Test data"; 
    $init->bar = new stdClass; 
    $init->bar->baaz = "Testing"; 
    $init->bar->fooz = new stdClass; 
    $init->bar->fooz->baz = "Testing again"; 
    $init->foox = "Just test"; 
    
    // Convert array to object and then object back to array 
    $array = objectToArray($init); 
    $object = arrayToObject($array); 
    
    // Print objects and array 
    print_r($init); 
    echo "
    "; 
    print_r($array); 
    echo "
    "; 
    print_r($object); 
    ?> 

    php stdClass:

    http://justcoding.iteye.com/blog/722621

  • 相关阅读:
    hdu 1272 小希的迷宫
    hdu 1318 Palindromes
    ANR traces中内存占用情况解读
    请教会linux shell脚本的=~是什么意思?
    kernel struct definition location
    SecureCRT sysrq键设置
    sysrq
    Linux中断管理 (1)Linux中断管理机制【转】
    Linux suspend 流程介绍(2)之 freeze task
    Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)
  • 原文地址:https://www.cnblogs.com/youxin/p/4112757.html
Copyright © 2011-2022 走看看