• 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

  • 相关阅读:
    <mySql完全手册>2011031401
    <海量数据库解决方案>2011030801
    检索
    <mySql完全手册>2011022401
    <自己动手写操作系统>2011031601
    数据结构和算法基础
    <海量数据库解决方案>2011031001
    <自己动手写操作系统>2011032101
    Delphi方法类型
    .NET下的Login机制
  • 原文地址:https://www.cnblogs.com/youxin/p/4112757.html
Copyright © 2020-2023  润新知